Sql server 2005 DateDiff SQL Server问题

Sql server 2005 DateDiff SQL Server问题,sql-server-2005,Sql Server 2005,有人能给我解释一下吗?我有点困惑为什么会发生这种事?基本上,我想知道的是,为什么星期日和本周每隔几天(从0年开始的几周)之间会有差异。如果有道理的话 我试着先设定日期,但没有效果。当然,本周的周一至周日与零年的周差应该相同吗 Set Datefirst 1 Select DateName(dw,0) --Monday Select DateDiff(week, 0, '20091109')--Monday: Difference 5732 Select DateDiff(week, 0, '20

有人能给我解释一下吗?我有点困惑为什么会发生这种事?基本上,我想知道的是,为什么星期日和本周每隔几天(从0年开始的几周)之间会有差异。如果有道理的话

我试着先设定日期,但没有效果。当然,本周的周一至周日与零年的周差应该相同吗

Set Datefirst 1
Select DateName(dw,0) --Monday
Select DateDiff(week, 0, '20091109')--Monday: Difference 5732
Select DateDiff(week, 0, '20091114')--Saturday: Difference 5732
Select DateDiff(week, 0, '20091115')--Sunday: Difference 5733
更奇怪的是,如果你选择了相同的两个日期,并且日期不同,那么一个是一周,另一个是6天。我是不是遗漏了什么

Select DateDiff(dd,'20091109','20091115')--6 Days difference
Select DateDiff(ww,'20091109','20091115')--1 Week difference

我正在使用SQL Server 2005

在许多国家,星期日被视为一周的第一天。

我认为您面临的问题是边界日期。包括在内吗

Select DateDiff(dd,'20091109','20091115')--6 Days difference
Select DateDiff(dd,'20091109','20091116')--7 Days difference

DateDiff-返回两个指定日期之间跨越的日期和时间边界数。(Books Online Definition)

所有datediff函数所做的就是计算传递给它的两个datetime参数之间的date边界数。因此,如果将一周定义为从星期天开始,则周边界为午夜星期天上午

因此,从周六晚上11:59到周日上午00:01,将与13天后的周日晚上00:01到周六晚上11:59相同

 x ------------------------------x    ==> 1 week diff
| Su M T W T F S | Su M T W T F S |
|                |                |
                x-x                   ==> Also 1 week diff

如果将Datefirst设置为1,则星期一是一周的第一天,周计算将使用MOD 7表示一周中的天数,使用/7表示周计数,其中星期日将被用作1,其他日期将被设置为0。

我想您已经了解了。。。选择DateDiff(wk,'20091108','20091114')返回0。这正是原因。在大多数设置中,SQL Server将日历周视为周日到周六。作为补充,您可以使用set DATEFIRST命令设置SQL Server将一周中的哪一天视为一周中的第一天。然后是1(星期一)到7(星期日)。在默认安装中,这是一个7(星期日)-1,因为“Select DateDiff(week,'20091109','20091115')”与SET DATEFIRST无关。另外,另一个代码保持不变,不管你把它作为DATEFIRST数量,所以我得到-1,因为别人的评论?谢谢,克雷格!