【问题标题】:Difference between current date and date stored in database not working当前日期和存储在数据库中的日期之间的差异不起作用
【发布时间】: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


【解决方案1】:

您可以通过简单的语句将 GETDATE() 的输出转换为 unix 时间戳:

SELECT GETDATE(), DATEDIFF(second, '1970-01-01', GETDATE())

您可以使用另一个时间戳来源(例如某些 PHP 函数)检查结果。反过来就有点难了。

UNIX_TIMESTAMP in SQL Server

How can I convert bigint (UNIX timestamp) to datetime in SQL Server?

为什么在 SQL Server 中使用 unix 时间戳?它不支持。 DATEDIFF、DATEADD 等函数仅适用于真实日期,不适用于 unix 时间戳秒。

【讨论】:

  • 所以在我的情况下,我该如何使用查询。我曾经这样使用:SELECT * FROM PRTL_UsrHashKeys where DATEDIFF(HOUR,timestamp, DATEDIFF(second, '1970-01-01', GETDATE( )))>72
  • 我已经修改了我的查询。你能帮我如何得到结果
  • 您不能使用带有 unix 时间戳的 SQL 服务器函数。这是行不通的。试试这样的SELECT * FROM PRTL_UsrHashKeys WHERE DATEDIFF(second, '1970-01-01', GETDATE()) - timestamp > 72 * 3600。如果您想使用 DATEDIFF,请使用一些日期类型而不是整数。
【解决方案2】:

我只想指出,unix 时间戳与时区无关。 getdate 使用服务器时区。

请改用getutcdate

DATEDIFF(SECOND,'1970-01-01', getutcdate())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-24
    • 2019-04-23
    • 1970-01-01
    • 2016-06-22
    • 1970-01-01
    相关资源
    最近更新 更多