Определите «эту неделю» в T-SQL - PullRequest
3 голосов
/ 16 января 2009

Это локаль, специфичная для США, где считается, что начало недели - воскресенье; Я хочу попросить SQL указать дату следующего воскресенья относительно сегодняшнего дня [getDate ()]. Если сегодня 15 января, он должен вернуться 18 января; если сегодня воскресенье, оно должно вернуться в следующее воскресенье, которое является 25-м. Было бы тривиально написать UDF, но мне было бы любопытно, если бы у кого-то были другие трюки / идеи?

Ответы [ 2 ]

5 голосов
/ 16 января 2009
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
2 голосов
/ 16 января 2009

Сегодняшний день недели:
SELECT @dow = DATEPART (d, GETDATE ()), где 1 = воскресенье, 7 = суббота

Вы хотите добавить достаточно дней, чтобы получить следующее воскресенье.

Если сегодня 1 = воскресенье, добавьте 7
Если сегодня 2 = понедельник, добавьте 6
Если сегодня 3 = вторник, добавьте 5 и т.д.

так что вы всегда добавляете 8 - сегодняшнее значение дня недели.

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

РЕДАКТИРОВАТЬ: Но Кейд побеждает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...