我有一个表,其中包含名为 timestamp
的列,该列以秒为单位存储记录的创建日期时间(使用 strtotime() 从 Date() 转换日期时间值)。我需要获取创建日期大于 72 小时的记录才能删除这些记录。
我的表有以下列:
userid(int)
timestamp(storing created dates in seconds)eg:'1427886372'
我使用了以下查询
SELECT DATEDIFF(HOUR,timestamp,'current date in seconds')>72 FROM table_name.
它不工作。我还想知道,是否有任何选项可以将 GETDATE()
的结果转换为 sql 中的秒数,就像 php 中的 strtotime()
一样,因为我得到了当前日期使用 php Date()
并使用 strtotime()
将其转换为秒数。
**编辑:**根据 kba 的回答,我已经像这样修改了查询。
SELECT * FROM PRTL_UsrHashKeys where
DATEDIFF(HOUR,timestamp, DATEDIFF(second, '1970-01-01', GETDATE()))>72
但它显示 在预期条件的上下文中指定的非 bool 类型的表达式,靠近 ')'。
最佳答案
您可以通过简单的语句将 GETDATE() 的输出转换为 unix 时间戳:
SELECT GETDATE(), DATEDIFF(second, '1970-01-01', GETDATE())
您可以使用另一个时间戳来源(例如某些 PHP 函数)检查结果。反过来有点难。
How can I convert bigint (UNIX timestamp) to datetime in SQL Server?
为什么在 SQL Server 中使用 unix 时间戳? 它不支持那个。函数 DATEDIFF、DATEADD 等仅适用于真实日期,不适用于 unix 时间戳秒。
关于php - 当前日期和存储在数据库中的日期之间的差异不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29745908/