前段时间再项目开发过程中写到一个update语句,需求两个时间戳之差作为where条件但是用了
HOUR (TIMEDIFF(expr1,expr2)) 方法成功了
UPDATE work_order_complaint
SET `type` = '中等'
WHERE
HOUR (TIMEDIFF(NOW(), createTime)) <![ CDATA [ <= ]]> 72
AND HOUR (TIMEDIFF(NOW(), createTime)) > 48
AND treatmentStatus = 1
AND `type` != '严重'
但是这种方法并不是很好,比较粗糙精确度不高,最关键的是之前写的时候测试环境和生产环境都是没有问题的,半个多月以后再写新需求的时候顺便看了下测试环境发现出问题了,数据刷不出来,打开生产环境没问题。(这个我我现在还都不知道到底是什么原因造成的:希望有同样经验的大佬可以指点下)。
后来本地跑了下项目有报错,然后代开Navicat运行sql报错:[Err] 1292 - Truncated incorrect time value: '932:29:36' 。后来百度了一下,我以为可能是 HOUR (TIMEDIFF(expr1,expr2)) 方法过时了。后来换了种写法,直接获取两个时间戳相差多少秒不再报这个错误;
UPDATE work_order_complaint
SET `type` = '中等'
WHERE
UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(createTime) <= 259200 #2天
AND UNIX_TIMESTAMP(NOW()) - UNIX_TIMESTAMP(createTime) > 172800 #3天
AND treatmentStatus = 1
AND `type` != '严重'
问题解决,但是其中这些原理还有很多不清楚,望大佬们指教!!!