Как найти дату первого дня текущей недели

Как найти дату первого дня текущей недели в транзакции-sql (t-sql) ?. Какой T-SQL-запрос нам нужно использовать для этого ?.

Это всегда будет воскресенье. Например, если мы запустим инструкцию sql на сегодня (2015-02-18) или в любой день текущей недели, она должна дать результат 2015-02-15, который является воскресенью.

Один из возможных способов получить дату в воскресенье на текущую неделю.

 SELECT DATEADD(wk, DATEDIFF(wk, 0, GETDATE()), -1) AS SundayOfCurrentWeek 

Использование DATEPART

Это зависит от настроек сервера, но если он настроен думать, что недели начинаются по воскресеньям, это будет работать:

 SELECT CAST(DATEADD(day, 1-DATEPART(weekday, GETDATE()), GETDATE()) AS date) 

DATEPART с параметром weekday дает день недели. Затем это число вычитается из текущей даты и преобразуется в date чтобы удалить временную часть.

Когда datepart – неделя (wk, ww) или день недели (dw), возвращаемое значение зависит от значения, заданного с помощью SET DATEFIRST .

Чтобы увидеть текущую настройку SET DATEFIRST, используйте функцию @@ DATEFIRST. Установка SET DATEFIRST устанавливается в момент выполнения или запуска, а не во время разбора.

Поэтому, чтобы безопасно играть, убедитесь, что для DATEFIRST установлено значение 7 (по умолчанию, американский английский), что означает воскресенье.

Использование DATEDIFF

В другом варианте используется DATEDIFF :

 SELECT DATEADD(wk, DATEDIFF(wk, '20150104', GETDATE()), '20150104') 

Он всегда возвращался в воскресенье. Волшебная дата 20150104 может быть любой датой, которая является воскресенью.

Указание SET DATEFIRST не влияет на DATEDIFF. DATEDIFF всегда использует воскресенье в качестве первого дня недели, чтобы гарантировать, что функция детерминирована.

С одной стороны, это хорошо, потому что гарантированно вернется в воскресенье, даже если вы забудете установить DATEFIRST. Но, с другой стороны, он не является гибким и не подходит тем, кто считает, что понедельник – первый день недели (те, что не в США).

использовать это

 Select dateadd(wk, datediff(wk, 0, getdate()) - 1, 0) as LastWeekStart Select dateadd(wk, datediff(wk, 0, getdate()), 0) as ThisWeekStart Select dateadd(wk, datediff(wk, 0, getdate()) + 1, 0) as NextWeekStart 

Чтобы получить больше информации

GETDATE в прошлом месяце

Interesting Posts

SQL Coalesce в предложении WHERE

Почему UNION быстрее, чем оператор OR

SQL «НЕ В» почему-то не работает ..?

Параметры вывода хранимой процедуры в SQL Server

Неверный синтаксис рядом с параметром

Изменение имени узла XML динамически для циклического перехода по длинному списку в SQL Server

что такое запрос, чтобы получить «связанные теги», например, в переполнении стека

Взять в среднем только последнюю группу

Создание таблиц базы данных Sql из бизнес-объектов

Могу ли я установить и запустить SQL Server локально, чтобы легально разрабатывать его бесплатно?

Как сгруппировать и подсчитать поле SUM

Как получить список имен элементов из значения XML в SQL Server

Пользовательская агрегированная функция в T-SQL вместо сборки .net?

Как группировать строки, разделенные определенной строкой в ​​SQL

SSIS, как я могу вставить пустую дату в базу данных с визуальным базовым

Давайте будем гением компьютера.