【发布时间】:2015-06-27 01:28:59
【问题描述】:
我有一个表,其中包含一个名为 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() 获取当前日期并使用 @ 将其转换为秒987654327@.
**编辑:**根据 kba 的回答,我已经像这样修改了查询。
SELECT * FROM PRTL_UsrHashKeys where
DATEDIFF(HOUR,timestamp, DATEDIFF(second, '1970-01-01', GETDATE()))>72
但它显示An expression of non-boolean type specified in a context where a condition is expected, near ')'.
【问题讨论】:
-
1427886372是从1900-01-01的哪个日期开始的以秒为单位的创建日期? -
@ughai 我在 php 中使用 Date() 来获取日期并使用 strtotime() 将结果转换为秒。
-
使用
WHERE [Timestamp] < DATEDIFF(SECOND, '19700101', DATEADD(HOUR, -72, GETDATE())),即时间戳小于 72 小时前,而不是在时间戳列上执行函数。如果还不算太晚,您可能希望考虑切换到DATETIME类型,或者如果您使用的是 2008 或更高版本,则切换到DATETIME2。从长远来看,这将使查询更容易,并避免所有这些转换。 -
我需要在当前日期前 72 小时创建的记录。 @GarethD
-
@GarethD 如果您将评论作为答案,我会接受您的回答
标签: php sql-server datetime