Как получить дату дня недели на MS SQL Server 7.0
Очень хочется получить дату дня недели (например понеделника) зная год и номер недели на MS SQL 7.0. Что-то вроде: Какое число будет понеделник 27'ой недели 2001'го года? Единственное решение которое с ходу приходит в голову - создать таблицу в которой были бы все даты за несколько лет и потом сравнивать по DatePart year, week, weekday. Но уж больно топорный вариант получается, хочется чего-нибудь более элегантного.
On 2001-08-14 12:12, Danchik wrote:
Очень хочется получить дату дня недели (например понеделника) зная год и номер недели на MS SQL 7.0. Что-то вроде: Какое число будет понеделник 27'ой недели 2001'го года? Единственное решение которое с ходу приходит в голову - создать таблицу в которой были бы все даты за несколько лет и потом сравнивать по DatePart year, week, weekday. Но уж больно топорный вариант получается, хочется чего-нибудь более элегантного.
</BLOCKQUOTE></FONT></TD></TR><TR><TD><HR></TD></TR></TABLE>
В MSSQL есть встроенные функции для работы с датами. Смотри документацию на MS SQL, функция называется DATEPART() вроде.
Вот чтобы получить воскресенье 27 недели 2001 года
dateadd(day, -1, dateadd(week, 27-1, dateadd(year, 2001-1900,'01/01/1900')))
P.S. Первый день по штатовски - воскресенье
@@DATEFIRST=7
Цитата:
On 2001-08-14 1522, Flying wrote
[quote]
On 2001-08-14 1212, Danchik wrote
Очень хочется получить дату дня недели (например понеделника) зная год и номер недели на MS SQL 7.0. Что-то вроде Какое число будет понеделник 27'ой недели 2001'го года? Единственное решение которое с ходу приходит в голову - создать таблицу в которой были бы все даты за несколько лет и потом сравнивать по DatePart year, week, weekday. Но уж больно топорный вариант получается, хочется чего-нибудь более элегантного.
В MSSQL есть встроенные функции для работы с датами. Смотри документацию на MS SQL, функция называется DATEPART() вроде.
[/quote]
Решил написать простой кейс:
CASE
WHEN DATEPART(weekday, new_data) = 1 THEN new_data
WHEN DATEPART(weekday, new_data) = 2 THEN dateadd(day, - 1, new_data)
WHEN DATEPART(weekday, new_data) = 3 THEN dateadd(day, - 2, new_data)
WHEN DATEPART(weekday, new_data) = 4 THEN dateadd(day, - 3, new_data)
WHEN DATEPART(weekday, new_data) = 5 THEN dateadd(day, - 4, new_data)
WHEN DATEPART(weekday, new_data) = 6 THEN dateadd(day, - 5, new_data)
WHEN DATEPART(weekday, new_data) = 7 THEN dateadd(day, - 6, new_data)
END
это хорошо. но надо учитывать региональные особенности. Не у всех неделя начинаеться с понедельника. У большинства - в воскресенья. Но в целом - как вариант.