今天写了一条相对比较应用比较丰富的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
用下面对两个时间作差,转化成秒,注意是 HzDeadLine-sendTime,即后面减去前面的,Second,这里可以是天,分钟,如果是天(Day)的话,后面的时分秒无效,可以自行测试。
TIMESTAMPDIFF(SECOND,mpi.sendTime,mdi.HzDeadLine)<(60*60*24*7)最近,项目已经上线,在运行中,不断测试并完善,甚是欣慰!
本人一直以为,一个项目,要想后期方便维护,必须有良好认真的注释之外,同时,保持良好的命名习惯和项目目录结构的良好规划,此外,对新增的需求和后续的需求,不能盲目或无条件地加,加功能需考虑到后期的维护和对系统的负担,不能无条件满足客户的要求,注意在操作上规范用户的操作,这些都很重要。