【发布时间】:2013-05-14 16:45:53
【问题描述】:
我一直在寻找一大段代码来找到本周的第一天,我到处都看到了这个:
DATEADD(WK, DATEDIFF(WK,0,GETDATE()),0)
每个地方都说这是我要找的代码。
这段代码的问题在于,如果你在星期日运行它,它会选择下一个星期一。
如果我跑:
SELECT GetDate() , DATEADD(WK, DATEDIFF(WK,0,GETDATE()),0)
今天(星期二)的结果:
2013-05-14 09:36:39.650................2013-05-13 00:00:00.000
这是正确的,它选择了 13 号星期一。
如果我跑:
SELECT GetDate()-1 , DATEADD(WK, DATEDIFF(WK,0,GETDATE()-1),0)
昨天(星期一)的成绩:
2013-05-13 09:38:57.950................2013-05-13 00:00:00.000
这是正确的,它选择了 13 号星期一。
如果我跑:
SELECT GetDate()-2 , DATEADD(WK, DATEDIFF(WK,0,GETDATE()-2),0)
12日(周日)成绩:
2013-05-12 09:40:14.817................2013-05-13 00:00:00.000
这是不正确的,它选择了13号星期一,而应该选择上一个星期一,6号。
谁能告诉我这里发生了什么?我很难相信没有人指出这不起作用,所以我想知道我错过了什么。
【问题讨论】:
-
我认为问题的根源在于使用日期 0,在 SQL Server 中它解析为 '1900-01-01' - 这是星期一。
-
@Pondlife:不是这样。问题是为什么返回不同的星期一取决于日期是星期天还是一周中的任何其他日子。
标签: sql-server tsql sql-server-2012