【问题标题】:Querying datetime columns for 'Now' minus a certain amount of time?查询“现在”的日期时间列减去一定的时间?
【发布时间】:2011-07-25 13:27:18
【问题描述】:

在 TSQL 中是否有一种方法可以查询日期时间列的值为“现在减去(特定时间量)”的行以选择时间范围?

例如在 MySQL 中,我可以构建这样的谓词:

(EndTime BETWEEN NOW() - INTERVAL 2 DAY AND NOW())

如何在 SQL Server 的 TSQL 中做到这一点?

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    您将使用 dateadd 函数,例如

    where endtime between dateadd(day, -2, getdate()) and getdate()
    

    因为endtime 列不是函数参数,查询优化器可以使用可能在其上定义的任何索引(sargable 的定义)。

    【讨论】:

      【解决方案2】:

      如果你想从今天减去两天,你可以这样做

      DateAdd( d, -2, CURRENT_TIMESTAMP)
      

      DATEADD (Transact-SQL)

      【讨论】:

        【解决方案3】:

        您可以使用datediff 函数。

        例如,要查找最近五分钟内创建的内容,您可以执行

        select *
        from   Table t
        where  datediff(minute, t.CreationDate, getutcdate()) <= 5
        

        【讨论】:

        • 虽然简单,但似乎这种方法无法利用索引信息(如果存在的话)。但 RDBMS 优化对我来说是 PFM。
        • @pst - 你是对的,datediff 不是sargableBobby D's answer 更合适。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-14
        • 1970-01-01
        • 2020-01-27
        • 2015-09-19
        相关资源
        最近更新 更多