如何解决SQL Server,导致DATEDIFF不一致
我试图了解为什么DATEDIFF
不能始终如一地工作。
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,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
有人可以向我解释一下吗?我对单个选择语句做错了吗?
感谢您的帮助。
解决方法
这是datediff的参数。
DATEDIFF ( datepart,startdate,enddate )
从传递的参数来看,我假设您要减去一个日期后的1或2天。您应该使用
DATEADD (datepart,number,date )
所以减法变成加减DATEADD (day,-1,'2015-10-02')
如果您确实想按预期使用DATEDIFF
函数,请确保在日期周围使用单引号,并阅读documentation中的datepart边界部分,因为边界处的纳秒差会导致变成一年的结果差异。
另外,当使用数字X作为日期时,SQL Server会将其解释为(1900-01-01 + X天)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。