我试图在其中一个查询中使用TIMESTAMPDIFF函数,这让我头疼。
表
id | web_address | timeperiod | timeperiod_exp
1 | www.google.com | 1564692614 | 1564779014
1564692614 = GMT:2019年8月1日,星期四,8:50:14 PM
1564779014 = GMT:2019年8月2日,星期五,8:50:14 PM
有什么问题 ?
可以看到,这两个时间戳之间的时差恰好是1天,但是没有返回任何记录。
SELECT * FROM mytable WHERE TIMESTAMPDIFF(DAY, timeperiod, timeperiod_exp) >= 1
在哪里?
https://www.db-fiddle.com/f/udmrC2xdvrEEKGxEF7ty84/7
应该做什么 ?
请看一下上面的小提琴,并建议应修改哪些内容或替代timestampdiff的其他功能。
最佳答案
查看TIMESTAMPDIFF()的文档
TIMESTAMPDIFF(单位,datetime_expr1,datetime_expr2)
返回datetime_expr2-datetime_expr1,其中datetime_expr1和
datetime_expr2是日期或日期时间表达式。一种表达可能是
一个日期,另一个日期时间
如您所见,它期望参数的类型为DATE或DATETIME。但是您将时间戳记存储为整数。
因此,可以使用FROM_UNIXTIME()将整数时间戳转换为DATETIME:
SELECT *
FROM mytable
WHERE TIMESTAMPDIFF(DAY, FROM_UNIXTIME(timeperiod), FROM_UNIXTIME(timeperiod_exp)) >= 1
db-fiddle
或仅使用简单的算术(因为我们知道一天中有几秒钟):
SELECT *
FROM mytable
WHERE (timeperiod_exp - timeperiod) >= 60*60*24
db-fiddle