2010-03-25 138 views
5

我正在运行一个简单的DATEDIFF查询,但它似乎没有正确计算日子或我做错了什么。SQL DATEDIFF不工作?

如果我运行

PRINT DATEDIFF(Day, 2010-01-20, 2010-01-01) 
RETURN 19 

这是正确的。如果我将第一次约会中的月份更改为2月(02),我会收到一些奇怪的东西。

PRINT DATEDIFF(Day, 2010-02-20, 2010-01-01) 
RETURN 20 

现在不应该是48什么的?

有人能看到我在做什么错误的或者是这难道不是正确的功能使用,如果我想这些日期间的无天?

我试着服用一个日期从其它:

PRINT (2010-02-20) - (2010-01-01) 
RETURN -20 

任何帮助非常赞赏。

感谢 J.

+0

@詹姆斯 - 没有它不应该是48 ...你应该把更大的日期作为最后一个参数。否则结果是否定的。不要忘记“'。请参阅下面的答案。 – JonH 2010-03-25 17:02:51

+0

我并不是说48就是'不应该是48或者什么',我只是在脑海中做了一个快速计算。 感谢您的帮助。 – JBoom 2010-03-25 17:13:18

回答

4

你缺少引号

PRINT DATEDIFF(Day, '2010-01-01', '2010-02-20') 

你得到20因为

2010 - 1 - 1 = 2008 
2010 - 2 - 20 = 1988 

2008 - 1988 = 20 
+0

哎呀什么一个笨蛋,我怎么没有得到的....感谢您的帮助。 – JBoom 2010-03-25 17:07:03

1

如果你运行它是这样的:

SELECT 2010-02-20, 2010-01-01 

你会看到

1988 2008 

这些是结果或您在此放置的整数运算。

将Date常数为单引号:

SELECT DATEDIFF(Day, '2010-02-20', '2010-01-01') 

-- 
-50 
1
PRINT DATEDIFF(Day, '2010-01-10', '2010-02-20') 

这需要第二日 - 第一次约会。不要忘记''。

1

如果你的周围有日期撇号它的工作原理 -

SELECT DATEDIFF(day, '2010-02-20', '2010-01-10') 

-41