sql первый день недели

Как получить «дату начала недели» и «дату окончания недели» из номера недели в SQL Server?

у меня есть запрос, который подсчитывает свадебные даты в базе данных.

Как мне работать, когда начало и конец каждой недели представлены в результирующем наборе?

13 ответов:

вы можете найти день недели и сделать дату добавить на дни, чтобы получить даты начала и окончания..

вы, вероятно,также хотите посмотреть на снятие времени с даты, хотя.

здесь DATEFIRST агностик решение:

вы также можете использовать это:

вот еще одна версия. Если ваш сценарий требует, чтобы суббота была 1-м днем недели, а пятница-последним днем недели, приведенный ниже код будет обрабатывать это:

sql первый день недели. Смотреть фото sql первый день недели. Смотреть картинку sql первый день недели. Картинка про sql первый день недели. Фото sql первый день недели

ниже запрос даст данные между началом и концом текущей недели начиная с воскресенья по субботу

и вот таблица, которая устанавливает его для вас.

но вы не должны помнить, что таблица и просто формула, и на самом деле вы могли бы использовать немного другой тоже основная потребность заключается в использовании значения, которое сделает остаток правильное количество дней.

этот метод был бы агностиком DATEFIRST установка, которая является то, что мне нужно, как я строю из измерения даты с несколькими методами недели включены.

Давайте разделим проблему на две части:

1) Определите день недели

последний столбец содержит идеал значение дня недели для недель с понедельника по воскресенье*. Просто взглянув на диаграмму, мы приходим к следующему уравнение:

2) вычислить понедельник и воскресенье для данной даты

это тривиально благодаря значению дня недели. Вот пример:

* в течение недели с воскресенья по субботу вам нужно немного скорректировать уравнение, например, добавить 1 где-то.

Я просто сталкиваюсь с подобным случаем с этим, но решение здесь, кажется, не помогает мне. Поэтому я пытаюсь разобраться в этом сам. Я разрабатываю только дату начала недели, дата окончания недели должна иметь аналогичную логику.

наиболее проголосовали ответ работает нормально, за исключением 1-я неделя и на прошлой неделе год. Например, если значение WeddingDate равно ‘2016-01-01’, то результат будет 2015-12-27 и 2016-01-02, но правильный ответ 2016-01-01 и 2016-01-02.

результат выглядит: sql первый день недели. Смотреть фото sql первый день недели. Смотреть картинку sql первый день недели. Картинка про sql первый день недели. Фото sql первый день недели

он работает на все Недели, 1-й или другие.

Источник

SET DATEFIRST (Transact-SQL)

Устанавливает первый день недели в виде числа от 1 до 7.

Обзор всех типов данных и функций даты и времени в языке Transact-SQL см. в статье Типы данных и функции даты и времени (Transact-SQL).

sql первый день недели. Смотреть фото sql первый день недели. Смотреть картинку sql первый день недели. Картинка про sql первый день недели. Фото sql первый день неделиСинтаксические обозначения в Transact-SQL

Синтаксис

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

number | @ number_var
Целочисленное значение, указывающее первый день недели. Может быть одним из указанных далее.

ЗначениеПервый день недели
1Понедельник
2Вторник
3Среда
4Четверг
5Пятница
6Суббота
7 (по умолчанию, американский английский)Воскресенье

Комментарии

Для просмотра текущего значения SET DATEFIRST используется функция @@DATEFIRST.

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

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

Разрешения

Необходимо быть членом роли public.

Примеры

Источник

Получить первый день недели в SQL Server

Я пытаюсь сгруппировать записи по неделям, сохраняя агрегированную дату как первый день недели. Однако стандартная методика, которую я использую для округления дат, кажется, не работает правильно с неделями (хотя она работает для дней, месяцев, лет, кварталов и любых других таймфреймов, к которым я ее применил).

Я могу обойти это достаточно легко, изменив приведенный выше код, чтобы:

но тот факт, что я должен сделать такое исключение, заставляет меня немного беспокоиться. Кроме того, извиняюсь, если это дублирующий вопрос. Я нашел несколько связанных вопросов, но ни один из них не касался этого аспекта конкретно.

13 ответов

чтобы ответить, почему вы получаете понедельник, а не воскресенье:

чтобы ответить, как получить в воскресенье:

если вы хотите воскресенье, то выберите базовую дату, которая не понедельник, а скорее воскресенье. Для пример:

поэтому, если вы измените свой DATEFIRST установка на понедельник, вторник, что у вас, поведение изменится. В зависимости от того, какое поведение вы хотите, вы можете использовать одну из этих функций:

«дешевый» запрос назначения:

» дорогой » запрос назначения:

я могу передать детали моих тестов, если это необходимо-остановка здесь, так как это уже становится довольно многословным. Я был немного удивлен, увидев, что Курт вышел как самый быстрый в верхнем конце, учитывая количество вычислений и встроенного кода. Может быть, я буду работать более тщательно тесты и блог об этом. если вы, ребята, не возражаете, чтобы я опубликовал ваши функции в другом месте.

Источник

Функция DATEPART стр. 1

Эта функция возвращает целое число, представляющее собой указанную аргументом datepart часть заданной вторым аргументом даты (date).

Список допустимых значений аргумента datepart, описанный выше в данном разделе, дополняется еще одним значением

DatepartДопустимые сокращения
Weekday — день неделиdw

Однако вернемся к примеру 7.1.3. В предположении, что время вылета/прилета является кратным минуте, мы можем его определить как сумму часов и минут. Поскольку функции даты/времени работают с целочисленными значениями, приведем результат к наименьшему интервалу — минутам. Итак, время вылета рейса 1123 в минутах:

Теперь мы должны сравнить, превышает ли время прилета время вылета. Если это так, следует вычесть из первого второе, чтобы получить продолжительность рейса. В противном случае к разности нужно добавить одни сутки (24*60 = 1440 минут).

Определить дату и время вылета рейса 1123.

В таблице совершенных рейсов Pass_in_trip содержится только дата рейса, но не время, так как в соответствии с предметной областью каждый рейс может выполняться только один раз в день. Для решения этой задачи нужно к дате, хранящейся в таблице Pass_in_trip, добавить время из таблицы Trip

Выполнив запрос, получим следующий результат

Trip_noTime
11232003-04-05 16:20:00.000
11232003-04-08 16:20:00.000

DISTINCT необходим здесь, чтобы исключить возможные дубликаты, поскольку номер и дата рейса дублируются в этой таблице для каждого пассажира данного рейса.

В ряде случаев функцию DATEPART можно заменить более простыми функциями. Вот они:

DAY (date) — целочисленное представление дня указанной даты. Эта функция эквивалентна функции DATEPART(dd, date).

MONTH (date) — целочисленное представление месяца указанной даты. Эта функция эквивалентна функции DATEPART(mm, date).

YEAR (date) — целочисленное представление года указанной даты. Эта функция эквивалентна функции DATEPART(yy, date).

Источник

DATEPART (Transact-SQL)

Эта функция возвращает целое число, представляющее указанную часть datepart заданного типа date.

Обзор всех типов данных и функций даты и времени в языке Transact-SQL см. в статье Типы данных и функции даты и времени (Transact-SQL).

sql первый день недели. Смотреть фото sql первый день недели. Смотреть картинку sql первый день недели. Картинка про sql первый день недели. Фото sql первый день неделиСинтаксические обозначения в Transact-SQL

Синтаксис

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

datepart
Определенная часть аргумента date, для которого функция DATEPART вернет значение типа integer. В приведенной ниже таблице перечислены все допустимые аргументы datepart.

DATEPART не принимает эквивалентные переменные, определяемые пользователем, для аргументов datepart.

datepartСокращения
yearyy, yyyy
quarterqq, q
monthmm, m
dayofyeardy, y
daydd, d
weekwk, ww
weekdaydw
hourhh
minutemi, n
secondss, s
millisecondms
microsecondmcs
nanosecondns
tzoffsettz
iso_weekisowk, isoww

date
Выражение, которое разрешается в один из следующих типов данных:

Для date DATEPART будет принимать столбец выражения, выражение, строковый литерал или определяемую пользователем переменную. Во избежание неоднозначности используйте четырехзначную запись года. Сведения о двузначном обозначении года см. в статье Настройка параметра конфигурации сервера two digit year cutoff.

Тип возвращаемых данных

Возвращаемое значение

Каждое выражение datepart и его краткие формы возвращают одно и то же значение.

Возвращаемое значение зависит от языка среды, задаваемого инструкцией SET LANGUAGE, и от параметра конфигурации сервера «язык по умолчанию» для имени входа. Если значение date является строковым литералом некоторого формата, то возвращаемое значение зависит от функции SET DATEFORMAT. Инструкция SET DATEFORMAT не изменяет возвращаемое значение, если дата представляется выражением столбца типа данных даты или времени.

.123456700

datepartВозвращаемое значение
year, yyyy, yy2007 г.
quarter, qq, q4
month, mm, m10
dayofyear, dy, y303
day, dd, d30
week, wk, ww44
weekday, dw3
hour, hh12
minute, n15
second, ss, s32
millisecond, ms123
microsecond, mcs123456
nanosecond, ns123456700
tzoffset, tz310
iso_week, isowk, isoww44

Аргументы функции datepart, содержащие информацию о номере недели и дня

Для week (wk, ww) или weekday (dw) datepart возвращаемое значение DATEPART зависит от значения, заданного функцией SET DATEFIRST.

1 января любого года определяет начальное число для компонента даты week datepart. Пример:

DATEPART (wk, ‘Jan 1, xxx x’) = 1,

где xxxx — любой год.

В этой таблице представлены возвращаемые значения параметров week и weekday datepart для даты 21.04.2007 с каждым аргументом функции SET DATEFIRST. 1 января 2007 г. приходится на понедельник. 21 апреля 2007 г. приходится на субботу. Для региональных настроек «Английский (США)»

SET DATEFIRST 7 (воскресенье). После задания DATEFIRST используйте предлагаемую инструкцию SQL для табличных значений datepart:

SELECT DATEPART(week, ‘2007-04-21 ‘), DATEPART(weekday, ‘2007-04-21 ‘)

возвращаемое1166217531744173517261717167

Аргументы функции datepart, отображающие год, месяц и день даты

Значения, возвращаемые в результате выполнения инструкций DATEPART (year, date), DATEPART (month, date) и DATEPART (day, date), совпадают с результатами выполнения функций YEAR, MONTH и DAY, соответственно.

iso_week datepart

Стандарт ISO 8601 включает в себя систему отсчета дней и недель ISO. Каждая неделя приписывается тому году, в котором находится ее четверг. Например, первая неделя 2004 г. (2004W01) считается с понедельника 29 декабря 2003 г. по воскресенье 4 января 2004 г. Этот стиль нумерации обычно используется в странах и регионах Европы. В других странах он применяется редко.

Примечание. Наибольшее число недель в году может составлять 52 или 53.

Система отсчета недель в разных странах и регионах может не совпадать со стандартом ISO. В таблице ниже представлено шесть возможных вариантов.

Первый день неделиСодержание первой недели годаДвойное присвоение недельПрименяется в:
Воскресенье1 января,

1–7 дней года

ДаСША
Понедельник1 января,

1–7 дней года

ДаБольшинство стран Европы, а также Великобритания
Понедельник4 января,

4–7 дней года

нетISO 8601, Норвегия и Швеция
Понедельник7 января,

7 дней года

нет
Среда1 января,

1–7 дней года

Да
Суббота1 января,

tzoffset

DATEPART возвращает значение tzoffset (tz) как количество минут (со знаком). В результате выполнения этой инструкции возвращается смещение часового пояса 310 минут:

Функция DATEPART отображает значение tzoffset описанным ниже образом.

Аргумент даты типа smalldatetime

Для значения date типа smalldatetime функция DATEPART возвращает количество секунд 00.

Возвращается значение по умолчанию для аргумента функции datepart, который отличен от даты

Если тип данных аргумента date не содержит указанной части datepart, функция DATEPART вернет значение по умолчанию для этой части datepart, только если для date указан литерал.

Если аргумент date указан как переменная или столбец таблицы и тип данных этой переменной или столбца не содержит указанной части datepart, функция DATEPART возвращает ошибку 9810. В этом примере переменная @t имеет тип данных time. Этот пример завершается ошибкой, потому что год даты не является допустимым для типа данных time:

Доли секунды

Эти инструкции демонстрируют, что функция DATEPART возвращает доли секунды:

Remarks

Функция DATEPART может использоваться в предложениях выбора из списка, WHERE, HAVING, GROUP BY и ORDER BY.

В SQL Server 2019 (15.x) функция DATEPART неявно приводит строковые литералы к типу datetime2. Это означает, что DATENAME не поддерживает формат ГЧМ (год, число, месяц) при передаче даты в виде строки. Для использования формата ГЧМ (год, число, месяц) необходимо явно привести строку к типу datetime или smalldatetime.

Примеры

В этом примере возвращается базовый год. Его значение используется при расчетах, связанных с датами. В примере дата указана как число. Обратите внимание на то, что SQL Server интерпретирует 0 как 1 января 1900 г.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *