【问题标题】:GetDate() function and this query are correct? [closed]GetDate() 函数和这个查询是否正确? [关闭]
【发布时间】:2013-07-06 06:06:16
【问题描述】:

下面的查询是否正确且更具体的是TransferTime < (GetDate() - 3

$num_rows = $db->doQuery('
    SELECT Class, TransferTime 
    FROM USERDATA 
    WHERE strUserId = ? 
      AND (TransferTime < (GetDate() - 3) OR TransferTime IS NULL)   
', $character);

它会检查 strUserIDtransfertime 是否少于 3 天,因为它在 3 天时并不能真正工作?

【问题讨论】:

    标签: php sql-server


    【解决方案1】:

    尝试:

    select GetDate() - 3
    

    它将真正从当前日期+时间中删除 72 小时

    【讨论】:

    • 我的查询需要它,而不是这样。
    • 我认为 op 担心条件的时间部分
    • @John Mak,如何判断您的查询是否适用于未定义的表和数据?对于您不确定的代码,您可以按照我的建议运行它以查看实际值是什么。我怎么知道你有什么 TransferTime 值?
    • 我在问 (GetDate() - 3) 它在我的查询中究竟应该如何工作(使当前日期减去 3)
    • @John Mak,我是说如果您运行select GetDate() - 3,您将看到 SQL Server 在查询中使用的实际值。它将占用当前日期+时间并减去 72 小时。
    【解决方案2】:

    GETDATE() - 3 将当前日期时间减去 3 天。如果您需要在 3 天前使用该过滤器,从 00:00:00.000 开始,那么您需要先剥离 GETDATE()TIME 部分。如果使用 SQL Server 2008+,您可以将 GETDATE() 转换为 DATE

    WHERE TransferTime < DATEADD(DAY,-3,CONVERT(DATE,GETDATE()))
    

    对于以前的版本,您可以使用:

    WHERE TransferTime < DATEADD(DAY,DATEDIFF(DAY,0,GETDATE())-3,0)
    

    【讨论】:

    • 我使用 MSSQL 2005,所以我当前的查询将减去 3 天,包括小时等,例如今天 7/8/2013 1:00 PM,所以它会在 2013 年 4 月 8 日减去下午 1:00 或?
    • @John Secure 是什么意思?易受什么影响?
    • @JohnMak 看,DATEADD()可以用来加减年、月、周、日、时、分、秒等,如果需要减1天,那么你用@ 987654331@,要减10小时吗?,用DATEADD(HOUR,-10,SomeColumn),如果要加25分钟,用DATEADD(MINUTE,25,SomeColumn),以此类推
    • @JohnMak 你是什么意思??我已经告诉过你,GETDATE()-3 适用于GETDATE(),并从当前日期和时间减去 3 天。是什么不工作??????
    • @JohnMak 我不想变得粗鲁,但你读过我的评论了吗?它非常清楚地说明了如何使用该功能。即使我不清楚,你知道你可以阅读dateadd的文档
    猜你喜欢
    • 1970-01-01
    • 2011-08-21
    • 2020-08-07
    • 1970-01-01
    • 2017-01-11
    • 1970-01-01
    • 1970-01-01
    • 2016-08-20
    • 2011-03-07
    相关资源
    最近更新 更多