1

我想找到本周星期一的日期

declare @td datetime
set @td = CONVERT(datetime,'28-07-2013',105)
print @td

declare @dt datetime
set @dt = (SELECT DATEADD(wk, DATEDIFF(wk,0,@td), 0) MondayOfCurrentWeek)
print @dt

这给了我正确的结果,只有当我有星期天的日期,它给我错误的答案,例如上面的 28 是 7 月的星期天,所以根据我的需要,我应该得到 22 07 2013 但默认情况下 sql server 采取星期天是一周的第一天,它给了我 29-07-2013

我也试过

Set DateFirst 1

经过

http://social.msdn.microsoft.com/Forums/sqlserver/en-US/8cc3493a-7ae5-4759-ab2a-e7683165320b/problem-with-datediff-and-datefirst

力求帮助我,

我希望在这里得到专家的帮助

谢谢

4

4 回答 4

2

相反,我会使用以下构造:

set @dt = DATEADD(day,
    -(DATEPART(weekday,@td) - DATEPART(weekday,'20130729') + 7) % 7
    ,@td)

这应该始终计算出正确的偏移量,以从特定日期减去到前一个星期一 - 它依赖于DATEFIRST有效的设置。它所依赖的只是 2013 年 7 月 29 日是星期一。你永远不会改变那个固定的日期。

于 2013-07-01T10:53:05.183 回答
1

我更喜欢使用日历表进行这样的查询。在我的本地系统上。. .

select max(cal_date)
from calendar
where cal_date <= '2013-07-28'
  and day_of_week = 'Mon'

在我看来,日历表的最大好处是可以看出查询显然是正确的。

于 2013-07-01T11:59:59.900 回答
1

您可以在此处找到有关一周的第一个日期和一周的最后一个日期的完整详细信息 http://www.sqlteam.com/forums/topic.asp?TOPIC_ID=50624

于 2013-07-05T12:57:41.593 回答
1

试试看....解决你的问题

DECLARE @DayOfTheWeek NVARCHAR(12)
SET @DayOfTheWeek=(SELECT DATENAME(DW,GETDATE()))
IF(@DayOfTheWeek='SUNDAY')
    BEGIN
        SELECT DATEADD(WK, DATEDIFF(WK,0,DATEADD(DAY, -1, GETDATE())), 0) MONDAYOFCURRENTWEEK
    END
ELSE
    BEGIN
        SELECT DATEADD(WK, DATEDIFF(WK,0,GETDATE()), 0) MONDAYOFCURRENTWEEK
    END
于 2013-07-17T09:25:28.480 回答