SQL Server日期时间筛选器查询

时间:2017-09-02 06:33:38

标签: sql sql-server datetime

我在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];

此查询的结果具有{订单日期] 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

3 个答案:

答案 0 :(得分:3)

SQL Server日期/时间列的精度因具体类型而异。在你的第一个,“0.999”被围捕。

最安全的方法是避开export function A() { return 'Hello, World' }; export default function A() { return 'Hello, World' }; 和时间组件,例如:

between

答案 1 :(得分: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);

答案 2 :(得分:1)

首先使用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];