我试图在其中一个查询中使用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

10-08 20:12