【问题标题】:How to find rows where difference in date columns are 3 or more days?如何查找日期列差异为 3 天或更长时间的行?
【发布时间】:2015-01-23 17:00:58
【问题描述】:

如何查找两个日期列(如下所示)之间的差异等于或大于 3 天的行(我使用什么运算符)?下面的示例将只返回所有大于。我需要将行限制为 3 天或更长时间。然后最好添加一个显示天数差异计数的列。我正在使用 Microsoft SQL Server Management Studio 版本。 11 在 SQL Server 9 上。我搜索了与时差有关的问题,但没有找到这种具体情况。感谢您对此的任何帮助。

SELECT        Id, LastContactDate, LastProfileReceivedDate
FROM            Location
WHERE        (Account_Id = '499') AND (LastContactDate > LastProfileReceivedDate)

【问题讨论】:

    标签: comparison operators


    【解决方案1】:

    有几种可能的查询可以返回指定的结果。我会这样做:

       SELECT l.Id
            , l.LastContactDate
            , l.LastProfileReceivedDate
            , TIMESTAMPDIFF(DAY,l.LastProfileReceivedDate,l.LastContactDate) AS days_diff
         FROM Location l 
        WHERE l.Account_Id = '499'
          AND l.LastContactDate >= LastProfileReceivedDate + INTERVAL 3 DAY
    

    跟进:

    上面的 SQL 查询是针对 MySQL 的(问题标记为“mysql”),这与 Microsoft SQL Server 完全不同。

    对于 Microsoft SQL Server,将 MySQL TIMESTAMPDIFF() 函数替换为 SQL Server DATEDIFF 函数,并将 + INTERVAL 3 DAY 替换为 DATEADD 函数:

       SELECT l.Id
            , l.LastContactDate
            , l.LastProfileReceivedDate
            , DATEDIFF(DAY,l.LastProfileReceivedDate,l.LastContactDate) AS days_diff
         FROM Location l 
        WHERE l.Account_Id = '499'
          AND l.LastContactDate >= DATEADD(DAY,3,l.LastProfileReceivedDate)
    

    【讨论】:

    • 谢谢斯宾塞。我运行了它,但得到了这个错误,即 TIMESTAMPDIFF 不是内置函数名。我正在使用 Microsoft SQL Server Management Studio 版本。 11 在 SQL Server 9 上。
    • 太棒了!完美运行!我把MySQL标签放进去的不幸;我已经删除了它。使用 dateadd 或 datediff 都有效,但 dateadd 更有效且更少混乱。现在我想将这两个日期列的日期时间格式转换为 2015 年 1 月 23 日样式。我现在正在研究它,但如果你在我解决之前阅读了这篇文章,我也会很感激这个答案。非常感谢!
    • 使用带有适当样式参数的 SQL Server CONVERT 函数。您必须查阅文档以找到正确的使用,我已经很久没有使用 SQL Server,https://msdn.microsoft.com/en-us/library/ms187928(v=sql.105).aspx,如果没有合适的,您可能需要连接一系列 DATEPART 表达式。也许 107 是你想要的风格。
    • 谢谢。我得到了这个工作: SELECT CONVERT(varchar(20), LastContactDate, 107)
    【解决方案2】:

    我使用了第一个答案中的信息并将其修改为这个并且它起作用了:

    SELECT Id AS Dormo_ID, LastContactDate, LastProfileReceivedDate, DATEDIFF(day, LastProfileReceivedDate, LastContactDate) AS Days_Difference 从位置 WHERE (Account_Id = '499') AND (DATEDIFF(day, LastProfileReceivedDate, LastContactDate) > 2)

    【讨论】:

      猜你喜欢
      • 2016-09-20
      • 2018-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-01
      • 1970-01-01
      • 2012-11-30
      相关资源
      最近更新 更多