Я занимался вопросами, и мой текущий сценарий - найти ближайшую субботу для данной даты. После того, как я получил логику, я придумал, что выглядит длинным и грязным запросом. И мне было интересно, есть ли способ упростить это. Вот мой запросКак найти Ближайший (день недели) на заданную дату
DECLARE @DATE DATE
SET @DATE ='2013-09-13'
IF DATENAME(DW,@DATE) = 'SUNDAY'
BEGIN
SELECT DATEADD(DAY,-1,@DATE) AS DATE, 'IS THE NEAREST SATURDAY'
END
ELSE IF DATENAME(DW,@DATE) = 'MONDAY'
BEGIN
SELECT DATEADD(DAY,-2,@DATE) AS DATE, 'IS THE NEAREST SATURDAY'
END
ELSE IF DATENAME(DW,@DATE) = 'TUESDAY'
BEGIN
SELECT DATEADD(DAY,-3,@DATE) AS DATE, 'IS THE NEAREST SATURDAY'
END
ELSE IF DATENAME(DW,@DATE) = 'WEDNESDAY'
BEGIN
SELECT DATEADD(DAY,3,@DATE) AS DATE, 'IS THE NEAREST SATURDAY'
END
ELSE IF DATENAME(DW,@DATE) = 'THURSDAY'
BEGIN
SELECT DATEADD(DAY,2,@DATE) AS DATE, 'IS THE NEAREST SATURDAY'
END
ELSE IF DATENAME(DW,@DATE) = 'FRIDAY'
BEGIN
SELECT DATEADD(DAY,1,@DATE) AS DATE, 'IS THE NEAREST SATURDAY'
END
ELSE IF DATENAME(DW,@DATE) = 'SATURDAY'
BEGIN
SELECT CONVERT(NVARCHAR,@DATE) + ' IS SATURDAY' AS DATE_DOW
END
Как мы видим запрос длинный и запускает несколько МСФ искать истинное состояние. Пожалуйста, не пишите запрос, просто намеки. Я хотел бы сам поработать над запросом.
Спасибо Goat CO, у моего исходного запроса были операторы CASE. Но поскольку THEN [может иметь только результат], а не выражение, он не работает, поэтому я попытался настроить несколько переменных для каждого условия WHEN, которое, казалось, сработало. – TanmoyDB
Почему бы не «ДЕЛО» работать? См. Обновленный. –
Спасибо за обновление, CAST никогда не приходило в голову. Виноват. – TanmoyDB