在T-SQL中确定“本周”

时间:2009-01-16 04:00:01

标签: sql sql-server tsql

这是特定于美国的区域,其中它认为一周的开始是星期日;我希望能够让SQL给我一个相对于今天的下一个星期日的日期[getDate()]。如果今天是1月15日,它将于1月18日返回;如果今天是星期天,它应该返回下一个星期日,即25日。写一个UDF对我来说是微不足道的,但是如果有人有其他技巧/想法,我很好奇吗?

2 个答案:

答案 0 :(得分:5)

DECLARE @d AS datetime
SET @d = '1/15/2009'
PRINT @d
PRINT DATEADD(day, 8 - DATEPART(weekday, @d), @d)
SET @d = '1/18/2009'
PRINT @d
PRINT DATEADD(day, 8 - DATEPART(weekday, @d), @d)

-- So it should be able to be used inline pretty efficiently:
DATEADD(day, 8 - DATEPART(weekday, datecolumn), datecolumn)

-- If you want to change the first day for a different convention, simply use SET DATEFIRST before performing the operation
-- e.g. for Monday: SET DATEFIRST 1
-- e.g. for Saturday: SET DATEFIRST 6

DECLARE @restore AS int
SET @restore = @@DATEFIRST
SET DATEFIRST 1

DECLARE @d AS datetime
SET @d = '1/15/2009'
PRINT @d
PRINT DATEADD(day, 8 - DATEPART(weekday, @d), @d)
SET @d = '1/19/2009'
PRINT @d

PRINT DATEADD(day, 8 - DATEPART(weekday, @d), @d)
SET DATEFIRST @restore

答案 1 :(得分:2)

今天的星期几:
SELECT @dow = DATEPART(d,GETDATE())其中1 =星期日,7 =星期六

你想增加足够的时间来获得下一个星期天。

如果今天是1 =星期日,请添加7
如果今天是2 =星期一,则添加6
如果今天是3 =星期二,请加5 等

所以你总是加上8 - 今天的星期值。

SELECT DATEADD(d,GETDATE(),8 - @dow(GETDATE))

编辑:但是凯德赢了!