【问题标题】:How to compute the difference between two dates in SQL Server如何计算 SQL Server 中两个日期之间的差异
【发布时间】:2015-03-26 10:56:56
【问题描述】:

我有一个名为table1 的表。它有一列NT_T_SENTDATE。此列保留日期。它有自 2005 年以来的数据。因此这张表很重。

我想在NT_T_SENTDATE 列中查看日期从 2013 年 12 月到 2014 年 12 月的行。我知道有datediff 方法,我为此使用了这个查询:

select * 
from notificationtransactions 
where datediff(day, NT_D_SentDate, '2015-03-25') > 360

但它也显示早于 2013 年的记录。

有人可以纠正我吗?我应该在查询中添加什么以便我只能看到超过 1 年但不超过 3 年的记录?

期待您的回复

普佳

【问题讨论】:

    标签: sql-server-2008


    【解决方案1】:

    这个查询将只返回今年的记录

     SELECT *
     FROM notificationtransactions 
     WHERE NT_T_SENTDATE> DATEADD(YY, -1, GETDATE())
    

    此查询将仅返回上一年的记录

       SELECT * 
       FROM notificationtransactions  
       WHERE  NT_T_SENTDATE BETWEEN
       DATEADD(YY, -2, GETDATE()) AND  DATEADD(YY, -1, GETDATE())
    

    【讨论】:

    • 嗨@mahmoud,谢谢你,是的,它按预期工作,但我有一个问题DATEADD(YY,-1,GETDATE())的用途是什么。请告诉
    • @AaronBertrand yy, yyyy 是年份的缩写,都是一样的
    • @KhushiSharma,DATEADD 是一个 tsql 函数,可用于增加或减少指定的时间间隔,并接受 3 个参数 1- [YY] 代表间隔类型 2- [-1] 代表要减去或减去的数字(在您的示例中它是负数,因此它减去) 3- [GETDATE()] 代表原始日期(在我们的示例中,它是另一个返回当前日期的 tsql 函数)总结该函数采用当前日期并从中减去一年。
    • @Mahmoud 你读过我关于why using abbreviations is bad的帖子吗?
    【解决方案2】:

    这个怎么样:

    SELECT * 
    FROM dbo.NotificationTransactions 
    WHERE 
        NT_D_SentDate <= '20140325' 
        AND NT_D_SentDate >= '20130101'
    

    它显示“发送日期”在 2013 年 1 月 1 日和一年前之间的所有记录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-01
      相关资源
      最近更新 更多