Если у меня есть дата 01.01.2009, я хочу узнать, каким днем это было, например, в понедельник, во вторник, и т.д...
Существует ли встроенная функция для этого в SQL Server 2005/2008? Или я должен использовать вспомогательную таблицу?
Используйте DATENAME
или DATEPART
:
SELECT DATENAME(dw,GETDATE()) -- Friday
SELECT DATEPART(dw,GETDATE()) -- 6
Несмотря на то, что ответ SQLMenace был принят, есть одна важная опция SET
, о которой вы должны знать, что
DATENAME вернет правильный дата имя , но не то же самое значение DATEPART , если первый день недели был изменен, как показано ниже.
declare @DefaultDateFirst int
set @DefaultDateFirst = @@datefirst
--; 7 First day of week is "Sunday" by default
select [@DefaultDateFirst] = @DefaultDateFirst
set datefirst @DefaultDateFirst
select datename(dw,getdate()) -- Saturday
select datepart(dw,getdate()) -- 7
--; Set the first day of week to * TUESDAY *
--; (some people start their week on Tuesdays...)
set datefirst 2
select datename(dw,getdate()) -- Saturday
--; Returns 5 because Saturday is the 5th day since Tuesday.
--; Tue 1, Wed 2, Th 3, Fri 4, Sat 5
select datepart(dw,getdate()) -- 5 <-- It's not 7!
set datefirst @DefaultDateFirst