在sqlserver中将默认的开始日期设置为星期一



我想找到当前星期一的日期

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月的星期日,所以根据我的需要,我应该得到2013年7月22日但默认情况下,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

力量帮助我,

我希望能从的专家那里得到帮助

感谢

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

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

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

对于这样的查询,我更喜欢使用日历表。在我的本地系统上。

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

在我看来,日历表的最大好处是查询可以被视为明显正确。

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

试试……解决你的问题

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

最新更新