Если у меня есть дата 01.01.2009, я хочу узнать, какой это был день, например, понедельник, вторник и т. Д.
Есть ли встроенная функция для этого в SQL Server 2005/2008? Или мне нужно использовать вспомогательную таблицу?
sql
sql-server
datetime
a_horse_with_no_name
источник
источник
Ответы:
Используйте
DATENAME
илиDATEPART
:источник
Несмотря на то, что ответ SQLMenace был принят, есть одна важная
SET
опция, о которой вы должны знатьDATENAME вернет правильное имя даты, но не то же значение DATEPART, если первый день недели был изменен, как показано ниже.
источник
( @@datefirst - 1 + datepart(weekday, thedate) ) % 7
. Воскресенье всегда будет нулевым.DayOfWeek
перечислении имеетDayOfWeek.Sunday
со значением ...0
. Таким образом, независимо от того, чтоDateFirst
установлено, необработанное возвращаемоеWEEKDAY
значение SQL никогда не будет совместимо с аналогом .NET. Ууу, Microsoft.источник
select datename(dw,getdate())
Чтобы получить детерминированное значение для дня недели для данной даты, вы можете использовать комбинацию DATEPART () и @@ datefirst . В противном случае вы зависите от настроек на сервере.
Проверьте следующий сайт для лучшего решения: MS SQL: день недели
Тогда день недели будет в диапазоне от 0 до 6, где 0 - воскресенье, 1 - понедельник и т. Д. Затем вы можете использовать простую инструкцию case, чтобы вернуть правильное название дня недели.
источник
ЕВРОПА:
источник
С SQL Server 2012 и более поздних версий вы можете использовать
FORMAT
функциюисточник
это рабочая копия моего кода, проверьте его, как получить имя дня от даты в SQL
источник
Если вы не хотите зависеть
@@DATEFIRST
или использоватьDATEPART(weekday, DateColumn)
, просто рассчитайте день недели самостоятельно.Для недель по понедельникам (Европа) самое простое:
Для недели в воскресенье (Америка) используйте:
Это возвращает номер дня недели (от 1 до 7) с 1 января соответственно 7-го, 1753.
источник
Вы можете использовать,
DATEPART(dw, GETDATE())
но имейте в виду, что результат будет зависеть от@@DATEFIRST
значения параметра сервера SQL, которое является значением первого дня недели (в Европе значение по умолчанию 7 - воскресенье).Если вы хотите изменить первый день недели на другое значение, вы можете использовать
SET DATEFIRST
но это может повлиять на всю область сеанса запросов, которая вам не нужна.Альтернативный способ - явно указать значение первого дня недели в качестве параметра и избежать зависимости от
@@DATEFIRST
настроек. Вы можете использовать следующую формулу для достижения этой цели, когда это необходимо:где
@WeekStartDay
первый день недели, который вы хотите для своей системы (от 1 до 7, что означает с понедельника по воскресенье).Я обернул его в функцию ниже, чтобы мы могли легко использовать его:
Пример использования:
GetDayInWeek('2019-02-04 00:00:00', 1)
Это эквивалентно следующему (но не зависит от параметра DATEFIRST сервера SQL):
источник
Вы можете найти эту версию полезной.
источник