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