Функции Transact-SQL для работы со строками и данными типа даты/времениФункции T-SQL для работы со значениями даты и времениПервый день недели стр. 2 |
|||||||||||||||||||||||||
Функция @@DATEFIRST
@@DATEFIRST возвращает число, которое определяет первый день недели, установленный для текущей сессии. При этом 1 соответствует понедельнику, а 7, соответственно, воскресенью. Т.е. если Для того, чтобы решение нашей задачи не зависело от значения, установленного для первого дня недели, воспользуемся функцией @@DATEFIRST. Сделать это можно, например, так
Чтобы изменить значение первого дня недели (на время текущей сессию), можно использовать оператор SET DATEFIRST. Так, если выполнить следующий код
Настройку первого дня недели может также поменять изменение языка сессии. Например, если мы выполним
Однако вы можете поменять параметры языка и первого дня недели одновременно, чтобы, скажем, получить английский язык, и при этом педеля будет начинаться с понедельника:
Языковые настройки влияют, в частности, на символьное представление компонентов даты/времени. Сравните, например, результаты:
Вывод. Если вы хотите, чтобы зависящие от настроек сервера/базы запросы всегда давали верный результат, можно задавать необходимые настроечные параметры для сессии, в которой эти запросы выполняются, или же проверять в каждом подобном запросе значения соответствующих параметров, в частности, с помощью функции @@DATEFIRST. Особенности: MSSQL
Решить эту задачу (Определить дату, на которую выпал первый понедельник января 2013 года.) можно и без применения функции @@DATEFIRST, воспользовавшись методом, предложенным Ициком Бен-Ганом [8]. Идея решения заключается в том, что: 1. Первое января 1900г. было понедельником. 2. Количество дней между двумя одинаковыми днями недели всегда кратно семи.
Автор: Гершович В.И. Особенности: MSSQL
Можно упомянуть еще один способ решения этой задачи без @@DATEFIRST, который использует сравнение любой из функций DATEPART/DATENAME с такой же функцией от даты, которая ЗАВЕДОМО является понедельником. Например, от уже упомянутого 1-го января 1900г.Тогда первоначальный запрос из этой главы выглядел бы так:
Автор: Курочкин П.А.
|