sql начало текущего дня
GETDATE (Transact-SQL)
Возвращает текущую системную метку времени базы данных в виде значения datetime без смещения часового пояса базы данных. Это значение наследуется от операционной системы компьютера, на котором работает экземпляр SQL Server.
SYSDATETIME и SYSUTCDATETIME имеют большую точность в долях секунды, чем GETDATE и GETUTCDATE. SYSDATETIMEOFFSET включает смещение часового пояса, заданное в системе. SYSDATETIME, SYSUTCDATETIME и SYSDATETIMEOFFSET можно присваивать переменным любого типа даты и времени.
База данных SQL Azure (за исключением Управляемого экземпляра SQL Azure) и Azure Synapse Analytics используют время в формате UTC. Если необходимо интерпретировать сведения о дате и времени в часовом поясе, отличном от UTC, используйте AT TIME ZONE в Базе данных SQL Azure или Azure Synapse Analytics.
Обзор всех типов данных и функций даты и времени в языке Transact-SQL см. в статье Типы данных и функции даты и времени (Transact-SQL).

Синтаксис
Тип возвращаемых данных
datetime
Remarks
Функция GETDATE может использоваться в инструкциях Transact-SQL везде, где допустимо использование выражения datetime.
GETDATE является недетерминированной функцией. Невозможно проиндексировать представления и выражения, ссылающиеся на эту функцию в столбце.
Использование SWITCHOFFSET с функцией GETDATE() может вызвать замедление выполнения запроса, поскольку оптимизатор запросов не может получить точные оценки количества элементов для значения GETDATE. Рекомендуется заранее вычислить значение GETDATE, а затем указать это значение в запросе, как показано в следующем примере. Кроме того, с помощью указания запроса OPTION (RECOMPILE) можно вынудить оптимизатор запросов повторно компилировать план запроса при каждом выполнении одного и того же запроса. В этом случае оптимизатор будет иметь точные оценки количества элементов для GETDATE(), что позволит ему сформировать более эффективный план запроса.
Примеры
В следующих примерах с помощью шести системных функций SQL Server, которые возвращают текущую дату и время, происходит возврат даты, времени или и того и другого. Значения возвращаются последовательно и поэтому могут различаться на доли секунды.
A. Получение текущей системной даты и времени
Б. Получение текущей системной даты
В. Получение текущего системного времени
Примеры: Azure Synapse Analytics и Система платформы аналитики (PDW)
В приведенных ниже примерах с помощью трех системных функций SQL Server, которые возвращают текущую дату и время, происходит получение даты, времени или и того и другого. Значения возвращаются последовательно и поэтому могут различаться на доли секунды.
Функции для работы с датами и временем
Поддержка часовых поясов
timeZone
Возвращает часовой пояс сервера.
Если функция вызывается в контексте распределенной таблицы, то она генерирует обычный столбец со значениями, актуальными для каждого шарда. Иначе возвращается константа.
Синтаксис
Возвращаемое значение
toTimeZone
Синтаксис
Аргументы
Возвращаемое значение
Пример
timeZoneOf
Возвращает название часового пояса для значений типа DateTime и DateTime64.
Синтаксис
Аргументы
Возвращаемое значение
Пример
timeZoneOffset
Возвращает смещение часового пояса в секундах от UTC. Функция учитывает летнее время и исторические изменения часовых поясов, которые действовали на указанную дату.
Для вычисления смещения используется информация из базы данных IANA.
Синтаксис
Аргументы
Возвращаемое значение
Пример
toYear
Переводит дату или дату-с-временем в число типа UInt16, содержащее номер года (AD).
toQuarter
Переводит дату или дату-с-временем в число типа UInt8, содержащее номер квартала.
toMonth
Переводит дату или дату-с-временем в число типа UInt8, содержащее номер месяца (1-12).
toDayOfYear
Переводит дату или дату-с-временем в число типа UInt16, содержащее номер дня года (1-366).
toDayOfMonth
Переводит дату или дату-с-временем в число типа UInt8, содержащее номер дня в месяце (1-31).
toDayOfWeek
toHour
toMinute
Переводит дату-с-временем в число типа UInt8, содержащее номер минуты в часе (0-59).
toSecond
Переводит дату-с-временем в число типа UInt8, содержащее номер секунды в минуте (0-59).
Секунды координации не учитываются.
toUnixTimestamp
Синтаксис
Возвращаемое значение
Пример
toStartOfYear
Округляет дату или дату-с-временем вниз до первого дня года.
Возвращается дата.
toStartOfISOYear
toStartOfQuarter
toStartOfMonth
Округляет дату или дату-с-временем вниз до первого дня месяца.
Возвращается дата.
Возвращаемое значение для некорректных дат зависит от реализации. ClickHouse может вернуть нулевую дату, выбросить исключение, или выполнить «естественное» перетекание дат между месяцами.
toMonday
Округляет дату или дату-с-временем вниз до ближайшего понедельника.
Возвращается дата.
toStartOfWeek(t[,mode])
Округляет дату или дату со временем до ближайшего воскресенья или понедельника в соответствии с mode.
Возвращается дата.
Аргумент mode работает точно так же, как аргумент mode toWeek(). Если аргумент mode опущен, то используется режим 0.
toStartOfDay
Округляет дату-с-временем вниз до начала дня. Возвращается дата-с-временем.
toStartOfHour
Округляет дату-с-временем вниз до начала часа.
toStartOfMinute
Округляет дату-с-временем вниз до начала минуты.
toStartOfSecond
Отсекает доли секунды.
Синтаксис
Аргументы
Возвращаемое значение
Примеры
Пример без часового пояса:
Пример с часовым поясом:
Смотрите также
toStartOfFiveMinute
Округляет дату-с-временем вниз до начала пятиминутного интервала.
toStartOfTenMinutes
Округляет дату-с-временем вниз до начала десятиминутного интервала.
toStartOfFifteenMinutes
Округляет дату-с-временем вниз до начала пятнадцатиминутного интервала.
toStartOfInterval(time_or_data, INTERVAL x unit [, time_zone])
toTime
Переводит дату-с-временем на некоторую фиксированную дату, сохраняя при этом время.
toRelativeYearNum
Переводит дату-с-временем или дату в номер года, начиная с некоторого фиксированного момента в прошлом.
toRelativeQuarterNum
Переводит дату-с-временем или дату в номер квартала, начиная с некоторого фиксированного момента в прошлом.
toRelativeMonthNum
Переводит дату-с-временем или дату в номер месяца, начиная с некоторого фиксированного момента в прошлом.
toRelativeWeekNum
Переводит дату-с-временем или дату в номер недели, начиная с некоторого фиксированного момента в прошлом.
toRelativeDayNum
Переводит дату-с-временем или дату в номер дня, начиная с некоторого фиксированного момента в прошлом.
toRelativeHourNum
Переводит дату-с-временем в номер часа, начиная с некоторого фиксированного момента в прошлом.
toRelativeMinuteNum
Переводит дату-с-временем в номер минуты, начиная с некоторого фиксированного момента в прошлом.
toRelativeSecondNum
Переводит дату-с-временем в номер секунды, начиная с некоторого фиксированного момента в прошлом.
toISOYear
Переводит дату-с-временем или дату в число типа UInt16, содержащее номер ISO года. ISO год отличается от обычного года, потому что в соответствии с ISO 8601:1988 ISO год начинается необязательно первого января.
Пример
toISOWeek
Пример
toWeek(date[, mode][, timezone])
Переводит дату-с-временем или дату в число UInt8, содержащее номер недели. Второй аргументам mode задает режим, начинается ли неделя с воскресенья или с понедельника и должно ли возвращаемое значение находиться в диапазоне от 0 до 53 или от 1 до 53. Если аргумент mode опущен, то используется режим 0.
Описание режимов (mode):
| Mode | Первый день недели | Диапазон | Неделя 1 это первая неделя … |
|---|---|---|---|
| 0 | Воскресенье | 0-53 | с воскресеньем в этом году |
| 1 | Понедельник | 0-53 | с 4-мя или более днями в этом году |
| 2 | Воскресенье | 1-53 | с воскресеньем в этом году |
| 3 | Понедельник | 1-53 | с 4-мя или более днями в этом году |
| 4 | Воскресенье | 0-53 | с 4-мя или более днями в этом году |
| 5 | Понедельник | 0-53 | с понедельником в этом году |
| 6 | Воскресенье | 1-53 | с 4-мя или более днями в этом году |
| 7 | Понедельник | 1-53 | с понедельником в этом году |
| 8 | Воскресенье | 1-53 | содержащая 1 января |
| 9 | Понедельник | 1-53 | содержащая 1 января |
Для режимов со значением «с 4 или более днями в этом году» недели нумеруются в соответствии с ISO 8601:1988:
Если неделя, содержащая 1 января, имеет 4 или более дней в новом году, это неделя 1.
Для режимов со значением «содержит 1 января», неделя 1 – это неделя содержащая 1 января. Не имеет значения, сколько дней в новом году содержала неделя, даже если она содержала только один день.
Пример
toYearWeek(date[,mode])
Возвращает год и неделю для даты. Год в результате может отличаться от года в аргументе даты для первой и последней недели года.
Аргумент mode работает точно так же, как аргумент mode toWeek(). Если mode не задан, используется режим 0.
Пример
date_trunc
Отсекает от даты и времени части, меньшие чем указанная часть.
Синтаксис
Аргументы
unit — единица измерения времени, в которой задана отсекаемая часть. String Literal.
Возможные значения:
value — дата и время. DateTime или DateTime64.
Возвращаемое значение
Примеры
Запрос без указания часового пояса:
Запрос с указанием часового пояса:
Смотрите также
date_add
Добавляет интервал времени или даты к указанной дате или дате со временем.
Синтаксис
Аргументы
unit — единица измерения времени, в которой задан интервал для добавления. String.
Возможные значения:
value — значение интервала для добавления. Int.
Возвращаемое значение
Пример
date_diff
Вычисляет разницу между двумя значениями дат или дат со временем.
Синтаксис
Аргументы
unit — единица измерения времени, в которой будет выражено возвращаемое значение функции. String.
Возможные значения:
Возвращаемое значение
Пример
date_sub
Вычитает интервал времени или даты из указанной даты или даты со временем.
Синтаксис
Аргументы
unit — единица измерения времени, в которой задан интервал для вычитания. String.
Возможные значения:
value — значение интервала для вычитания. Int.
Возвращаемое значение
Пример
timestamp_add
Добавляет интервал времени к указанной дате или дате со временем.
Синтаксис
Аргументы
unit — единица измерения времени, в которой задан интервал для добавления. String.
Возможные значения:
Возвращаемое значение
Пример
timestamp_sub
Вычитает интервал времени из указанной даты или даты со временем.
Синтакис
Аргументы
unit — единица измерения времени, в которой задан интервал для вычитания. String.
Возможные значения:
value — значение интервала для вычитания. Int.
Возвращаемое значение
Пример
Возвращает текущую дату и время.
Синтаксис
Параметры
Возвращаемое значение
Пример
Запрос без указания часового пояса:
Запрос с указанием часового пояса:
today
Возвращает текущую дату на момент выполнения запроса. Функция не требует аргументов.
То же самое, что toDate(now())
yesterday
timeSlot
timeSlots(StartTime, Duration,[, Size])
toYYYYMM
Переводит дату или дату со временем в число типа UInt32, содержащее номер года и месяца (YYYY * 100 + MM).
toYYYYMMDD
Переводит дату или дату со временем в число типа UInt32, содержащее номер года, месяца и дня (YYYY * 10000 + MM * 100 + DD).
toYYYYMMDDhhmmss
Переводит дату или дату со временем в число типа UInt64 содержащее номер года, месяца, дня и время (YYYY * 10000000000 + MM * 100000000 + DD * 1000000 + hh * 10000 + mm * 100 + ss).
formatDateTime
Функция преобразует дату-и-время в строку по заданному шаблону. Важно: шаблон — константное выражение, поэтому использовать разные шаблоны в одной колонке не получится.
Синтаксис
Возвращаемое значение
Возвращает значение времени и даты в определенном вами формате.
Поля подстановки
Пример
dateName
Возвращает указанную часть даты.
Синтаксис
Аргументы
Возвращаемое значение
Пример
FROM_UNIXTIME
Функция преобразует Unix timestamp в календарную дату и время.
Примеры
Если указан только один аргумент типа Integer, то функция действует так же, как toDateTime, и возвращает тип DateTime.
В случае, когда есть два аргумента: первый типа Integer или DateTime, а второй является строкой постоянного формата — функция работает также, как formatDateTime, и возвращает значение типа String.
DATEPART (Transact-SQL)
Эта функция возвращает целое число, представляющее указанную часть datepart заданного типа date.
Обзор всех типов данных и функций даты и времени в языке Transact-SQL см. в статье Типы данных и функции даты и времени (Transact-SQL).

Синтаксис
Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.
Аргументы
datepart
Определенная часть аргумента date, для которого функция DATEPART вернет значение типа integer. В приведенной ниже таблице перечислены все допустимые аргументы datepart.
DATEPART не принимает эквивалентные переменные, определяемые пользователем, для аргументов datepart.
| datepart | Сокращения |
|---|---|
| year | yy, yyyy |
| quarter | qq, q |
| month | mm, m |
| dayofyear | dy, y |
| day | dd, d |
| week | wk, ww |
| weekday | dw |
| hour | hh |
| minute | mi, n |
| second | ss, s |
| millisecond | ms |
| microsecond | mcs |
| nanosecond | ns |
| tzoffset | tz |
| iso_week | isowk, isoww |
date
Выражение, которое разрешается в один из следующих типов данных:
Для date DATEPART будет принимать столбец выражения, выражение, строковый литерал или определяемую пользователем переменную. Во избежание неоднозначности используйте четырехзначную запись года. Сведения о двузначном обозначении года см. в статье Настройка параметра конфигурации сервера two digit year cutoff.
Тип возвращаемых данных
Возвращаемое значение
Каждое выражение datepart и его краткие формы возвращают одно и то же значение.
Возвращаемое значение зависит от языка среды, задаваемого инструкцией SET LANGUAGE, и от параметра конфигурации сервера «язык по умолчанию» для имени входа. Если значение date является строковым литералом некоторого формата, то возвращаемое значение зависит от функции SET DATEFORMAT. Инструкция SET DATEFORMAT не изменяет возвращаемое значение, если дата представляется выражением столбца типа данных даты или времени.
.123456700
| datepart | Возвращаемое значение |
|---|---|
| year, yyyy, yy | 2007 г. |
| quarter, qq, q | 4 |
| month, mm, m | 10 |
| dayofyear, dy, y | 303 |
| day, dd, d | 30 |
| week, wk, ww | 44 |
| weekday, dw | 3 |
| hour, hh | 12 |
| minute, n | 15 |
| second, ss, s | 32 |
| millisecond, ms | 123 |
| microsecond, mcs | 123456 |
| nanosecond, ns | 123456700 |
| tzoffset, tz | 310 |
| iso_week, isowk, isoww | 44 |
Аргументы функции 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 ‘)
возвращаемое
Аргументы функции 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. В таблице ниже представлено шесть возможных вариантов.























































