Php 当前日期和数据库中存储的日期之间的差异不工作
我有一个表,其中包含一个名为Php 当前日期和数据库中存储的日期之间的差异不工作,php,sql-server,datetime,Php,Sql Server,Datetime,我有一个表,其中包含一个名为timestamp的列,该列以秒为单位存储记录的创建日期时间(使用strotime()从Date()转换日期时间值)。我需要获取创建日期大于72小时的记录,以便删除这些记录 “我的表”有以下列: userid(int) timestamp(storing created dates in seconds)eg:'1427886372' 我使用了以下查询 SELECT DATEDIFF(HOUR,timestamp,'current date in seconds')
timestamp
的列,该列以秒为单位存储记录的创建日期时间(使用strotime()从Date()转换日期时间值)。我需要获取创建日期大于72小时的记录,以便删除这些记录
“我的表”有以下列:
userid(int)
timestamp(storing created dates in seconds)eg:'1427886372'
我使用了以下查询
SELECT DATEDIFF(HOUR,timestamp,'current date in seconds')>72 FROM table_name.
它不起作用。我还想知道,是否有任何选项可以将sql中的GETDATE()
的结果转换为秒,就像php中的strotime()
一样,因为我使用phpdate()
获取当前日期,并使用strotime()
将其转换为秒
**编辑:**根据kba的回答,我修改了如下查询
SELECT * FROM PRTL_UsrHashKeys where
DATEDIFF(HOUR,timestamp, DATEDIFF(second, '1970-01-01', GETDATE()))>72
但它显示的是在“')附近预期条件的上下文中指定的非布尔型表达式。您可以通过简单语句将GETDATE()的输出转换为unix时间戳:
SELECT GETDATE(), DATEDIFF(second, '1970-01-01', GETDATE())
您可以使用另一个时间戳源(例如一些PHP函数)检查结果。反过来就难了一点
为什么在SQL server中使用unix时间戳?它不支持该功能。功能DATEDIFF、DATEADD等仅适用于实际日期,而不适用于unix时间戳秒。我只想指出,unix时间戳与时区无关。
getdate
使用服务器时区
改用getutcdate
DATEDIFF(SECOND,'1970-01-01',getutcdate())
1427886372
是以秒为单位创建的日期,从日期开始日期1900-01-01
?@ughai我在php中使用date()获取日期,并使用strotime()将结果转换为秒。使用WHERE[时间戳],即时间戳小于72小时,而不是在时间戳列上执行函数。如果还不太晚,如果您使用2008或更高版本,您可能希望考虑切换到 DATETIME> <代码> >或“代码> DATEMEM2”。这将使查询更容易从长远来看,避免所有这些转换。删除当前日期前72小时创建的记录@GarethD@GarethD如果您给出评论作为回答,我将接受您的回答。在我的情况下,我如何使用查询。我使用的是:从PRTL_UsrHashKeys中选择*其中DATEDIFF(小时,时间戳,DATEDIFF(秒,'1970-01-01',GETDATE())>72我修改了我的查询。你能帮助我如何获得结果吗?你不能使用带有unix时间戳的SQL server函数。它不起作用。请尝试以下操作SELECT*FROM PRTL_UsrHashKeys WHERE DATEDIFF(第二个,'1970-01-01',GETDATE())-timestamp>72*3600
。如果要使用DATEDIFF,请使用一些日期类型而不是整数。