【发布时间】:2020-08-13 07:19:31
【问题描述】:
我试图了解为什么 DATEDIFF 不能始终如一地工作。
我有一张表Projects 具有以下值:
Task_ID Start_Date End_Date
--------------------------------------
1 2015-10-01 2015-10-02
24 2015-10-02 2015-10-03
2 2015-10-03 2015-10-04
23 2015-10-04 2015-10-05
3 2015-10-11 2015-10-12
22 2015-10-12 2015-10-13
4 2015-10-15 2015-10-16
21 2015-10-17 2015-10-18
5 2015-10-19 2015-10-20
20 2015-10-21 2015-10-22
6 2015-10-25 2015-10-26
19 2015-10-26 2015-10-27
7 2015-10-27 2015-10-28
18 2015-10-28 2015-10-29
8 2015-10-29 2015-10-30
17 2015-10-30 2015-10-31
9 2015-11-01 2015-11-02
16 2015-11-04 2015-11-05
10 2015-11-07 2015-11-08
15 2015-11-06 2015-11-07
11 2015-11-05 2015-11-06
14 2015-11-11 2015-11-12
12 2015-11-12 2015-11-13
13 2015-11-17 2015-11-18
当我对其运行以下查询时;
WITH t AS
(
SELECT
Start_Date s,
End_Date e,
ROW_NUMBER() OVER(ORDER BY Start_Date) rn
FROM
Projects
GROUP BY
Start_Date, End_Date
)
SELECT
s, e, rn, DATEDIFF(day, rn, s)
FROM t
我得到这个输出:
2015-10-01 2015-10-02 1 42275
2015-10-02 2015-10-03 2 42275
2015-10-03 2015-10-04 3 42275
2015-10-04 2015-10-05 4 42275
2015-10-11 2015-10-12 5 42281
2015-10-12 2015-10-13 6 42281
2015-10-15 2015-10-16 7 42283
2015-10-17 2015-10-18 8 42284
2015-10-19 2015-10-20 9 42285
2015-10-21 2015-10-22 10 42286
2015-10-25 2015-10-26 11 42289
2015-10-26 2015-10-27 12 42289
2015-10-27 2015-10-28 13 42289
2015-10-28 2015-10-29 14 42289
2015-10-29 2015-10-30 15 42289
2015-10-30 2015-10-31 16 42289
2015-11-01 2015-11-02 17 42290
2015-11-04 2015-11-05 18 42292
2015-11-05 2015-11-06 19 42292
2015-11-06 2015-11-07 20 42292
2015-11-07 2015-11-08 21 42292
2015-11-11 2015-11-12 22 42295
2015-11-12 2015-11-13 23 42295
2015-11-17 2015-11-18 24 42299
但是当我单独执行DATEDIFF时,我得到了不同的结果:
select DATEDIFF(day, 1, 2015-10-01)
2003
select DATEDIFF(day, 2, 2015-10-02)
2001
有人可以向我解释一下吗?我对单个 select 语句做错了吗?
感谢您的帮助。
【问题讨论】:
-
设置一个重现问题的 dbfiddle。
-
@Prashy,datediff 函数需要 2 个日期而不是天数
-
而
2015-10-02与'2015-10-02'有很大不同。 -
2015-10-01 = 2004。你必须写
select DATEDIFF(day, 1, '2015-10-01') -
@DenisRubashkin 非常感谢。现在我懂了。添加引号后,它工作正常。
标签: sql sql-server datediff