【问题标题】:SQL Server datetime filter querySQL Server 日期时间筛选器查询
【发布时间】:2017-09-02 06:33:37
【问题描述】:

我在 SQL Server 中有这个查询:

SELECT 
    [Order Date], SUM([Profit]) 
FROM
    [sample].[dbo].[superstore]
WHERE  
    [Order Date] BETWEEN '2012-06-21 00:00:00.000' AND '2012-09-21 23:59:59.999'
GROUP BY 
    [Order Date]
ORDER BY  
    [Order Date];

此查询的结果有记录,[Order Date] 为2012-06-21 00:00:00.000

但是有了这个查询

SELECT 
    [Order Date], SUM([Profit]) 
FROM
    [sample].[dbo].[superstore]
WHERE  
    [Order Date] BETWEEN '2012-06-21 00:00:00.000' AND '2012-09-21 23:59:59.998'
GROUP BY 
    [Order Date]
ORDER BY 
    [Order Date];

我没有得到这个记录。

SQL Server 是否有任何此处缺少的属性?

提示:[Order Date] 的类型是 datetime

【问题讨论】:

  • DATETIME 在 SQL Server 中的精度为 3.33 毫秒,这会导致这些奇怪的舍入效果。建议改用DATETIME2(n)DATETIME,它们是在 SQL Server 2008 中引入的——这些类型没有这种奇怪的精度和舍入问题

标签: sql sql-server datetime


【解决方案1】:

SQL Server 日期/时间列的精度因具体类型而异。在您的第一个中,“0.999”正在四舍五入。

最安全的方法是避开between 和时间组件,例如:

SELECT [Order Date] , sum([Profit]) 
FROM [sample].[dbo].[superstore]
WHERE [Order Date] >=  '2012-06-21' AND
      [Order Date] < '2012-09-22'
GROUP BY [Order Date]
ORDER BY [Order Date];

【讨论】:

    【解决方案2】:

    使用下面的查询

     SELECT
      CAST([Order Date] AS date),
      SUM([Profit])
    FROM [sample].[dbo].[superstore]
    WHERE CAST([Order Date] AS date) BETWEEN '2012-06-21' AND '2012-09-21'
    GROUP BY CAST([Order Date] AS date)
    ORDER BY CAST([Order Date] AS date);
    

    【讨论】:

      【解决方案3】:

      对日期范围使用 BETWEEN 运算符一开始似乎很吸引人,但正如您所发现的那样,这令人头疼。如果您坚持以下格式,您会发现无论日期/时间数据类型如何,它都能正常工作。

      注意:在 BETWEEN 是逻辑 >= 和

      SELECT
          [Order Date], SUM(Profit)
      FROM
          sample.dbo.superstore
      WHERE
          [Order Date] >= '2012-06-21'
          AND [Order Date] < '2012-09-22'
      GROUP BY
          [Order Date]
      ORDER BY
          [Order Date];
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-03-10
        相关资源
        最近更新 更多