您的位置:首页 > 数据库 > MySQL

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

2016-01-14 19:04 483 查看
今天写了一条相对比较应用比较丰富的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)
最近,项目已经上线,在运行中,不断测试并完善,甚是欣慰!

本人一直以为,一个项目,要想后期方便维护,必须有良好认真的注释之外,同时,保持良好的命名习惯和项目目录结构的良好规划,此外,对新增的需求和后续的需求,不能盲目或无条件地加,加功能需考虑到后期的维护和对系统的负担,不能无条件满足客户的要求,注意在操作上规范用户的操作,这些都很重要。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: