2014-09-26 408 views
0

程序员应该在使用diffdate函数时使用一天还是一周?在我看来,他们的工作原理基本相同。人们可以简单地使用更适合他们需求的那一种。但是,从这个查询中,即使日期非常相似,DIFFDATE似乎也得到了不同的结果。 (特别是第3行和第8行)我不明白为什么第3行会得到8天,但只有一周,第8行也会得到8行,但只有1周。SQL:在DIFFDATE函数中使用Day或Week?

SELECT OrderDate, ShipDate, DateDiff(week, OrderDate, ShipDate)as week, DateDiff(day, OrderDate,  ShipDate) as day 
FROM Sales.SalesOrderHeader 
Where DateDiff(day, OrderDate, ShipDate) > 7 

enter image description here

回答

3

SQL Server的datediff()函数可能不会做你认为它的作用。

它计算两个日期时间之间传递的边界数。因此,2014年1月1日23时59分和2014年1月2日00时01分之间的datediff(day)为1天。对于2014-01-01 00:01和2014-01-01 23:59,datediff(day)为0天。

这同样适用于几周。

这是您正在看到的行为。这是有据可查的here

+0

感谢您回复我的帖子@GordonLinoff。你的解释使帮助,我通过链接阅读。也许你可以澄清为什么在第3行和第8行会有不同的星期编号 - 因为OrderDate的天数都是31,他们的ShipDates是第8天。 SQL周是从星期天开始的吗?或者它是一组7天,并且无关紧要一周中的哪一天? – user3281388 2014-09-26 01:21:28

+0

@ user3281388。 。 。数周开始取决于'DATEFIRST'(请参阅http://msdn.microsoft.com/zh-cn/library/ms174420.aspx)。默认情况是星期一开始。 – 2014-09-26 01:40:59

+0

太好了 - 非常感谢@GordonLinoff的帮助和澄清。我很感激! – user3281388 2014-09-26 01:41:58

2

好了,周一,1日至周二,9日是一周(你搬进接下来的一周),但周日,7日周一,15日两个星期(你整整一个星期跳过,并且我的星期从星期一开始)。

这就像从22:00到23:00移动一小时是0天的差异,但从23:45移动到0:45是1天的差异。或者从12月30日到12月31日,12月31日到1月1日,或者(多年)

+0

谢谢@Thilo的回复。 SQL是否遵循正常的日历周?或者它是一组7天,它开始的哪一天并不重要? – user3281388 2014-09-26 01:25:54

相关问题