在sql server中将默认开始日设置为星期一

时间:2013-07-01 10:34:45

标签: sql sql-server date

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

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

dint帮帮我,

我希望从专家处获得帮助

谢谢

4 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:1)

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分: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