SQL Server,DATEDIFF的结果不一致

SQL Server,DATEDIFF的结果不一致,sql,sql-server,datediff,Sql,Sql Server,Datediff,我试图理解为什么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

我试图理解为什么
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年

2001年

有人能给我解释一下吗?我是否对单个select语句做了错误的处理


谢谢您的帮助。

这就是datediff的参数

DATEDIFF ( datepart , startdate , enddate )  
根据您传递的参数判断,我假设您试图从日期中减去1或2天。你应该使用

DATEADD (datepart , number , date )  
所以减法变成了加减法,比如
DATEADD(day,-1,'2015-10-02')

如果确实希望按预期使用
DATEDIFF
函数,请确保在日期周围使用单引号,并阅读中的datepart边界部分,因为边界处的纳秒差可能会转化为结果中的年差


另外,当使用数字X作为日期时,SQL Server会将其解释为(1900-01-01+X天)。

设置一个复制该问题的数据库。@Prashy,datediff函数采用2个日期而不是日期编号
2015-10-02
'2015-10-02'
.2015-10-01=2004非常不同。您必须编写
选择DATEDIFF(日期,1,'2015-10-01')
@DenisRubashkin非常感谢。现在我明白了。在我添加了引号之后,它工作得很好。
DATEADD (datepart , number , date )