kei*_*en7 3 sql t-sql sql-server
这是美国特有的区域,其中认为一周的开始是星期日; 我希望能够让SQL给我一个相对于今天的下一个星期日的日期[getDate()].如果今天是1月15日,它将于1月18日返回; 如果今天是星期天,它应该返回下一个星期日,即25日.这对于编写UDF来说是微不足道的,但我很好奇是否有其他人有其他技巧/想法?
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
Run Code Online (Sandbox Code Playgroud)