关于MySQL 的时间相加天数和时间作差的SQL

来源:互联网 发布:姚明新秀赛季各场数据 编辑:程序博客网 时间:2024/06/13 08:44

      今天写了一条相对比较应用比较丰富的Sql语句,特别在这里总结一下关于时间作差和相加、case when等开发常用的用法。

           SELECT    mri.packId,mri.mailId,0,0,0,1,                 (CASE  WHEN mi.productId=2  THEN                 IF(TIMESTAMPDIFF(SECOND,mpi.sendTime,mdi.mailDeadLine)<(60*60*24*5),DATE_ADD(mpi.sendTime,INTERVAL 5 DAY ),mdi.mailDeadLine)                 ELSE                  DATE_ADD(mpi.sendTime,INTERVAL mi.deliveTime+2 DAY )  END                  )                   AS MailDeadLine,                (CASE  WHEN  mi.productId=2  THEN                IF(TIMESTAMPDIFF(SECOND,mpi.sendTime,mdi.HzDeadLine)<(60*60*24*7),DATE_ADD(mpi.sendTime,INTERVAL 7 DAY ),mdi.HzDeadLine)                 WHEN mi.productId<>2 AND mi.hzFlag=1  THEN                 DATE_ADD(mpi.sendTime,INTERVAL mi.hzTime DAY )                 ELSE NULL END)                  AS HzDeadLine                 FROM qct_produce.mail_review_info mri,qct_produce.mail_imp mi,qct_produce.mail_pack_info mpi,qct_produce.mail_deliver_info mdi                  WHERE mri.mailFlag=0 AND mri.mailId = mi.mailId AND mri.packId = mpi.packId AND mri.dlId=mdi.dlId

这里用到Date_Add 对一个时间进行天数相加

用下面对两个时间作差,转化成秒,注意是 HzDeadLine-sendTime,即后面减去前面的,Second,这里可以是天,分钟,如果是天(Day)的话,后面的时分秒无效,可以自行测试。

TIMESTAMPDIFF(SECOND,mpi.sendTime,mdi.HzDeadLine)<(60*60*24*7)
       最近,项目已经上线,在运行中,不断测试并完善,甚是欣慰!

      本人一直以为,一个项目,要想后期方便维护,必须有良好认真的注释之外,同时,保持良好的命名习惯和项目目录结构的良好规划,此外,对新增的需求和后续的需求,不能盲目或无条件地加,加功能需考虑到后期的维护和对系统的负担,不能无条件满足客户的要求,注意在操作上规范用户的操作,这些都很重要。

1 0