Если вам нужно запустить это как часть SELECT, вы можете использовать fo llowing:
SELECT
CAST(DATEADD(DAY,
CASE
WHEN DATEPART(WEEKDAY, GETDATE()) >= 5
THEN 5 - DATEPART(WEEKDAY, GETDATE())
ELSE ((-2 - DATEPART(WEEKDAY, GETDATE())))
END, GETDATE()) AS DATE) AS PreviousThursday
С данными выборки:
DECLARE @Sample TABLE
(
theDate DATETIME
)
INSERT @Sample
SELECT '20100805' UNION ALL -- Thursday
SELECT '20100806' UNION ALL -- Friday
SELECT '20100807' UNION ALL -- Saturday
SELECT '20100808' UNION ALL -- Sunday
SELECT '20100809' UNION ALL -- Monday
SELECT '20100810' UNION ALL -- Tuesday
SELECT '20100811' UNION ALL -- Wednesday
SELECT '20100812' UNION ALL -- Thursday
SELECT '20100813' UNION ALL -- Friday
SELECT '20100814'
SELECT
DATENAME(WEEKDAY, thedate),
thedate,
DATEADD(DAY,
CASE
WHEN DATEPART(WEEKDAY, theDate) >= 5
THEN 5 - DATEPART(WEEKDAY, theDate)
ELSE ((-2 - DATEPART(WEEKDAY, theDate)))
END, theDate)
FROM @Sample
С переменной:
DECLARE @TheDate DATETIME = '5/2/2015'
SELECT
DATEADD(DAY,
CASE
WHEN DATEPART(WEEKDAY, @TheDate) >= 5
THEN 5 - DATEPART(WEEKDAY, @TheDate)
ELSE ((-2 - DATEPART(WEEKDAY, @TheDate)))
END, @TheDate) AS PreviousThursday
Что такое СУБД? –
@ SébastienSevrin 2012 –
Я не знаю, если это только я, но это так же ясно, как грязь для меня. Можете ли вы показать нам, что именно вы после I.e. Какие данные поступают и какие результаты вы хотите получить? –