【问题标题】:The difference between two dates两个日期之间的差异
【发布时间】:2011-10-29 21:02:49
【问题描述】:

为了学习,我一直在写一些关于 SQL Server 的查询。

我想知道如何在 SQL 查询中获得今天与 90 天前的差异?

【问题讨论】:

  • 今天和90天前的区别?我相当确定这是一个常数(忽略 DST 变化、闰秒等):-)
  • 是的,我找到了 DATEDIFF,但我做不到,选择 datediff([....], ..., getdate()) 但我不知道如何使用我只想从中获取日期现在到 3 个月前,也就是说今天的日期 18.08.2011,我想找到 18.05.2011
  • 不,我认为是 DATEADD(MONTH, -3, GETDATE()) 因为他说他想要 05/18 给定 08/18。尽管如此,这也会返回当前时间,而不是午夜,这通常是范围查询所必需的。看我的回答。此外,对于 SQL Server 2008,我建议改掉对日期时间使用隐式数学的习惯,因为它不适用于新类型(日期、日期时间 2 等)。

标签: sql sql-server sql-server-2005 sql-server-2008 date-arithmetic


【解决方案1】:
DATEDIFF

http://msdn.microsoft.com/en-us/library/ms189794.aspx

DECLARE @90DaysAgo datetime
        ,@Today datetime

SET @90DaysAgo = DATEADD(d, -90, GETDATE())
SET @Today = GETDATE()

SELECT DATEDIFF(d, @90DaysAgo, @Today) --Returns 90

【讨论】:

    【解决方案2】:

    试试这个来返回正好是 90 年前的日期和时间:

    SELECT GETDATE()-90
    

    输出:

    -----------------------
    2011-05-20 10:55:12.360
    
    (1 row(s) affected)
    

    这将为您提供仅 90 天前的日期,时间为 00:00:00.000:

    SELECT DATEADD(day,DATEDIFF(day,0,GETDATE()),-90)
    

    输出:

    -----------------------
    2011-05-20 00:00:00.000
    
    (1 row(s) affected)
    

    【讨论】:

      【解决方案3】:

      您想要DATEADD,而不是 DATEDIFF,您需要决定是否需要 90 天前:

      SELECT DATEADD(day,-90,CURRENT_TIMESTAMP)
      

      或 3 个月前:

      SELECT DATEADD(month,-3,CURRENT_TIMESTAMP)
      

      【讨论】:

      • 谢谢 :),我明白了。谢谢 Curt 谢谢 Damien_The_Unbeliever
      • @Aaron Bertrand:好点子 - 并不是急于求成,只是看到 OP 相当新而且还没有接受答案,所以我想指出这是礼貌和正确的事情去做。
      【解决方案4】:

      这将正确舍入到 3 个月前(不是 90 天前)的午夜,这似乎是您想要的(08-18 -> 05-18 是 92 天,因为那里有两个 31 日)。

      ...
      WHERE column >= DATEADD(MONTH, -3, 
          DATEADD(DAY, DATEDIFF(DAY, '20000101', CURRENT_TIMESTAMP), '20000101'));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-12
        • 2015-09-14
        • 2015-06-21
        • 2020-02-06
        • 2023-04-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多