Перейти к содержимому

Sql как получить дату без времени

  • автор:

Sql как получить дату без времени

Для работы с датой и временем в MySQL есть несколько типов данных: DATE , TIME , DATETIME и TIMESTAMP .

Тип Описание Диапазон значений Размер
DATE Хранит значения даты в виде ГГГГ-ММ-ДД.
Например, 2022-12-05
от 1000-01-01 до 9999-12-31 3 байта
TIME Хранит значения времени в формате ЧЧ:ММ:СС. (или в формате ЧЧЧ:ММ:СС для значений с большим количеством часов).
Например, 800:50:50
от -838:59:59 до 838:59:59 3 байта
DATETIME Хранит значение даты и времени в виде ГГГГ-MM-ДД ЧЧ:ММ:СС.
Например, 2022-12-05 10:37:22
от 1000-01-01 00:00:00 до 9999-12-31 23:59:59 8 байта
TIMESTAMP Хранит значение даты и времени в виде ГГГГ-MM-ДД ЧЧ:ММ:СС.
Например, 2022-12-05 10:37:22
от 1970-01-01 00:00:01 до 2038-01-19 03:14:07 4 байта

Типы данных DATETIME и TIMESTAMP в MySQL похожи друг на друга, так как оба направлены на хранение даты и времени. Но между ними есть ряд существенных отличий, определяющих какой из этих типов данных когда лучше использовать.

Хранит значения в диапазоне от 1000-01-01 00:00:00 до 9999-12-31 23:59:59 и при этом занимает 8 байт. Этот тип данных не зависит от временной зоны, установленной в MySQL. Он всегда отображается ровно в таком виде, в котором был установлен и в котором хранится в базе данных. То есть при изменении часового пояса, отображение времени не изменится.

MySQL
CREATE TABLE datetime_table (datetime_field DATETIME); SET @@session.time_zone="+00:00"; -- сбрасываем часовой пояс в MYSQL INSERT INTO datetime_table VALUES("2022-06-16 16:37:23"); SET @@session.time_zone="+03:00"; -- меняем часовой пояс в MYSQL SELECT * FROM datetime_table; 
datetime_field
2022-06-16 16:37:23

Хранит сколько прошло секунд с 1970-01-01 00:00:00 по нулевому часовому поясу и занимает 4 байта. При выборках отображается с учётом текущего часового пояса. Часовой пояс можно задать в настройках операционной системы, где работает MySQL, в глобальных настройках MySQL или в конкретной сессии. В базе данных при создании записи с типом TIMESTAMP значение сохраняется по нулевому часовому поясу.

MySQL
CREATE TABLE timestamp_table (timestamp_field TIMESTAMP); SET @@session.time_zone="+00:00"; -- сбрасываем часовой пояс в MYSQL INSERT INTO timestamp_table VALUES("2022-06-16 16:37:23"); SET @@session.time_zone="+03:00"; -- меняем часовой пояс в MYSQL SELECT * FROM timestamp_table; 
timestamp_field
2022-06-16 19:37:23

Также стоит помнить о существующем ограничении TIMESTAMP в диапазоне возможных значений от 1970-01-01 00:00:01 до 2038-01-19 03:14:07, что ограничивает его применение. Так, данный тип данных не подойдёт для хранения дат рождения пользователей.

Значения DATETIME , DATE и TIMESTAMP могут быть заданы одним из следующих способов:

  • Как строка в формате YYYY-MM-DD HH:MM:SS или в формате YY-MM-DD HH:MM:SS для указания даты и времени
  • Как строка в формате YYYY-MM-DD или в формате YY-MM-DD для указания только даты

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

MySQL
CREATE TABLE date_table (datetime TIMESTAMP); INSERT INTO date_table VALUES("2022-06-16 16:37:23"); INSERT INTO date_table VALUES("22.05.31 8+15+04"); INSERT INTO date_table VALUES("2014/02/22 16*37*22"); INSERT INTO date_table VALUES("20220616163723"); INSERT INTO date_table VALUES("2021-02-12"); SELECT * FROM date_table; 
datetime
2022-06-16 16:37:23
2022-05-31 08:15:04
2014-02-22 16:37:22
2022-06-16 16:37:23
2021-02-12 00:00:00

Sql как получить дату без времени

Типы данных даты и времени

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

Типы данных DATETIME, DATE, TIME

Тип данных DATETIME используется для величин, содержащих информацию как о дате, так и о времени в формате 'YYYY-MM-DD HH:MM:SS'

Тип данных DATE используется для величин с информацией только о дате в формате 'YYYY-MM-DD'. Поддерживается диапазон величин от '1000-01-01' до '9999-12-31'.

Тип данных TIME используется для хранения значений времени в формате HH.MM.SS[.ssss]

Тип данных YEAR

MySQL Server поддерживает однобайтный тип данных YEAR, предназначенный для представления значений года в формате YYYY. Диапазон возможных значений - от 1901 до 2155.

Величины типа YEAR могут быть заданы в различных форматах:

  • Как четырехзначная строка в интервале значений от '1901' до '2155'.
  • Как четырехзначное число в интервале значений от 1901 до 2155.
  • Как двухзначная строка в интервале значений от '00' до '99'. Величины в интервалах от '00' до '69' и от '70' до '99' при этом преобразуются в величины YEAR в интервалах от 2000 до 2069 и от 1970 до 1999 соответственно.
  • Как двухзначное число в интервале значений от 1 до 99. Величины в интервалах от 1 до 69 и от 70 до 99 при этом преобразуются в величины YEAR в интервалах от 2001 до 2069 и от 1970 до 1999 соответственно. Необходимо принять во внимание, что интервалы для двухзначных чисел и двухзначных строк несколько различаются, так как нельзя указать ``ноль'' непосредственно как число и интерпретировать его как 2000. Необходимо задать его как строку '0' или '00', или же оно будет интерпретировано как 0000.

Недопустимые величины YEAR преобразуются в 0000.

Тип данных TIMESTAMP

Назначение типа данных timestamp в MS SQL Server и MySQL Server значительно отличается.

В языке Transcat SQL, используемом в MS SQL Server тип данных, TIMESTAMP представляет собой автоматически сформированные уникальные двоичные числа. При произведении любых изменений в строке значение TIMESTAMP будет обновлено. Таким образом, столбец типа TIMESTAMP можно использовать, чтобы определить, было ли произведено изменение какого-либо значения в строке с момента ее последнего считывания. В таблице может быть только один столбец типа TIMESTAMP.

В MySQL Server тип столбца TIMESTAMP используется для автоматической записи текущих даты и времени при выполнении операций вставки или обновления. Допускается наличие нескольких столбцов типа TIMESTAMP в таблице, но в этом случае автоматически обновляется только первый из них. Столбец типа TIMESTAMP можно установить в значение, отличное от текущих даты и времени путем явного указания значения столбца при выполнении операций вставке и обновлении данных.

Функции для работы с датами и временем

Все функции по работе с датой и временем, для которых это имеет смысл, могут принимать второй, необязательный аргумент - имя часового пояса. Пример: Asia/Yekaterinburg. В этом случае, они используют не локальный часовой пояс (по умолчанию), а указанный.

SELECT  toDateTime('2016-06-15 23:00:00') AS time,  toDate(time) AS date_local,  toDate(time, 'Asia/Yekaterinburg') AS date_yekat,  toString(time, 'US/Samoa') AS time_samoa 
┌────────────────time─┬─date_local─┬─date_yekat─┬─time_samoa──────────┐ │ 2016-06-15 23:00:00 │ 2016-06-15 │ 2016-06-16 │ 2016-06-15 09:00:00 │ └─────────────────────┴────────────┴────────────┴─────────────────────┘ 

timeZone​

Возвращает часовой пояс сервера, считающийся умолчанием для текущей сессии: значение параметра session_timezone, если установлено.

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

Синтаксис

timeZone() 

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

Смотрите также

serverTimeZone​

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

Синтаксис

serverTimeZone() 

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

Смотрите также

toTimeZone​

Переводит дату или дату с временем в указанный часовой пояс. Часовой пояс - это атрибут типов Date и DateTime . Внутреннее значение (количество секунд) поля таблицы или результирующего столбца не изменяется, изменяется тип поля и, соответственно, его текстовое отображение.

Синтаксис

toTimezone(value, timezone) 

Аргументы

  • value — время или дата с временем. DateTime64.
  • timezone — часовой пояс для возвращаемого значения. String. Этот аргумент является константой, потому что toTimezone изменяет часовой пояс столбца (часовой пояс является атрибутом типов DateTime* ).

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

Пример

SELECT toDateTime('2019-01-01 00:00:00', 'UTC') AS time_utc,  toTypeName(time_utc) AS type_utc,  toInt32(time_utc) AS int32utc,  toTimeZone(time_utc, 'Asia/Yekaterinburg') AS time_yekat,  toTypeName(time_yekat) AS type_yekat,  toInt32(time_yekat) AS int32yekat,  toTimeZone(time_utc, 'US/Samoa') AS time_samoa,  toTypeName(time_samoa) AS type_samoa,  toInt32(time_samoa) AS int32samoa FORMAT Vertical; 
Row 1: ────── time_utc: 2019-01-01 00:00:00 type_utc: DateTime('UTC') int32utc: 1546300800 time_yekat: 2019-01-01 05:00:00 type_yekat: DateTime('Asia/Yekaterinburg') int32yekat: 1546300800 time_samoa: 2018-12-31 13:00:00 type_samoa: DateTime('US/Samoa') int32samoa: 1546300800 

toTimeZone(time_utc, 'Asia/Yekaterinburg') изменяет тип DateTime('UTC') в DateTime('Asia/Yekaterinburg') . Значение (unix-время) 1546300800 остается неизменным, но текстовое отображение (результат функции toString()) меняется time_utc: 2019-01-01 00:00:00 в time_yekat: 2019-01-01 05:00:00 .

timeZoneOf​

Возвращает название часового пояса для значений типа DateTime и DateTime64.

Синтаксис

timeZoneOf(value) 

Аргументы

  • value — Дата с временем. DateTime или DateTime64.

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

  • Название часового пояса.

Пример

SELECT timezoneOf(now()); 
┌─timezoneOf(now())─┐ │ Etc/UTC │ └───────────────────┘ 

timeZoneOffset​

Возвращает смещение часового пояса в секундах от UTC. Функция учитывает летнее время и исторические изменения часовых поясов, которые действовали на указанную дату. Для вычисления смещения используется информация из базы данных IANA.

Синтаксис

timeZoneOffset(value) 

Аргументы

  • value — Дата с временем. DateTime or DateTime64.

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

  • Смещение в секундах от UTC.

Пример

SELECT toDateTime('2021-04-21 10:20:30', 'Europe/Moscow') AS Time, toTypeName(Time) AS Type,  timeZoneOffset(Time) AS Offset_in_seconds, (Offset_in_seconds / 3600) AS Offset_in_hours; 
┌────────────────Time─┬─Type──────────────────────┬─Offset_in_seconds─┬─Offset_in_hours─┐ │ 2021-04-21 10:20:30 │ DateTime('Europe/Moscow') │ 10800 │ 3 │ └─────────────────────┴───────────────────────────┴───────────────────┴─────────────────┘ 

toYear​

Переводит дату или дату-с-временем в число типа UInt16, содержащее номер года (AD).

toQuarter​

Переводит дату или дату-с-временем в число типа UInt8, содержащее номер квартала.

toMonth​

Переводит дату или дату-с-временем в число типа UInt8, содержащее номер месяца (1-12).

toDayOfYear​

Переводит дату или дату-с-временем в число типа UInt16, содержащее номер дня года (1-366).

toDayOfMonth​

Переводит дату или дату-с-временем в число типа UInt8, содержащее номер дня в месяце (1-31).

Синонимы: DAYOFMONTH , DAY .

toDayOfWeek​

Переводит дату или дату-с-временем в число типа UInt8, содержащее номер дня в неделе (понедельник - 1, воскресенье - 7).

toHour​

Переводит дату-с-временем в число типа UInt8, содержащее номер часа в сутках (0-23). Функция исходит из допущения, что перевод стрелок вперёд, если осуществляется, то на час, в два часа ночи, а перевод стрелок назад, если осуществляется, то на час, в три часа ночи (что, в общем, не верно - даже в Москве два раза перевод стрелок был осуществлён в другое время).

toMinute​

Переводит дату-с-временем в число типа UInt8, содержащее номер минуты в часе (0-59).

toSecond​

Переводит дату-с-временем в число типа UInt8, содержащее номер секунды в минуте (0-59). Секунды координации не учитываются.

toUnixTimestamp​

Переводит строку, дату или дату-с-временем в Unix Timestamp, имеющий тип UInt32 . Строка может сопровождаться вторым (необязательным) аргументом, указывающим часовой пояс.

Синтаксис

toUnixTimestamp(date) toUnixTimestamp(str, [timezone]) 

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

  • Возвращает Unix Timestamp.

Пример

SELECT '2017-11-05 08:07:47' AS dt_str,  toUnixTimestamp(dt_str) AS from_str,  toUnixTimestamp(dt_str, 'Asia/Tokyo') AS from_str_tokyo,  toUnixTimestamp(toDateTime(dt_str)) AS from_datetime,  toUnixTimestamp(toDateTime64(dt_str, 0)) AS from_datetime64,  toUnixTimestamp(toDate(dt_str)) AS from_date,  toUnixTimestamp(toDate32(dt_str)) AS from_date32 FORMAT Vertical; 
Row 1: ────── dt_str: 2017-11-05 08:07:47 from_str: 1509869267 from_str_tokyo: 1509836867 from_datetime: 1509869267 from_datetime64: 1509869267 from_date: 1509840000 from_date32: 1509840000 

Тип возвращаемого значения описанными далее функциями toStartOf* , toLastDayOf* , toMonday , timeSlot определяется конфигурационным параметром enable_extended_results_for_datetime_functions имеющим по умолчанию значение 0 .

  • enable_extended_results_for_datetime_functions = 0 :
    • Функции toStartOfYear , toStartOfISOYear , toStartOfQuarter , toStartOfMonth , toStartOfWeek , toLastDayOfWeek , toLastDayOfMonth , toMonday возвращают Date или DateTime .
    • Функции toStartOfDay , toStartOfHour , toStartOfFifteenMinutes , toStartOfTenMinutes , toStartOfFiveMinutes , toStartOfMinute , timeSlot возвращают DateTime . Хотя эти функции могут принимать значения расширенных типов Date32 и DateTime64 в качестве аргумента, при обработке аргумента вне нормального диапазона значений ( 1970 - 2148 для Date и 1970-01-01 00:00:00 - 2106-02-07 08:28:15 для DateTime ) будет получен некорректный результат.
    • Функции toStartOfYear , toStartOfISOYear , toStartOfQuarter , toStartOfMonth , toStartOfWeek , toLastDayOfWeek , toLastDayOfMonth , toMonday возвращают Date или DateTime если их аргумент Date или DateTime и они возвращают Date32 или DateTime64 если их аргумент Date32 или DateTime64 .
    • Функции toStartOfDay , toStartOfHour , toStartOfFifteenMinutes , toStartOfTenMinutes , toStartOfFiveMinutes , toStartOfMinute , timeSlot возвращают DateTime , если их аргумент имеет тип Date или DateTime , и DateTime64 если их аргумент имеет тип Date32 или DateTime64 .

    toStartOfYear​

    Округляет дату или дату-с-временем вниз до первого дня года. Возвращается дата.

    toStartOfISOYear​

    Округляет дату или дату-с-временем вниз до первого дня ISO года. Возвращается дата. Начало ISO года отличается от начала обычного года, потому что в соответствии с ISO 8601:1988 первая неделя года - это неделя с четырьмя или более днями в этом году.

    1 Января 2017 г. - воскресение, т.е. первая ISO неделя 2017 года началась в понедельник 2 января, поэтому 1 января 2017 это 2016 ISO-год, который начался 2016-01-04.

    SELECT toStartOfISOYear(toDate('2017-01-01')) AS ISOYear20170101; 
    ┌─ISOYear20170101─┐ │ 2016-01-04 │ └─────────────────┘ 

    toStartOfQuarter​

    Округляет дату или дату-с-временем вниз до первого дня квартала. Первый день квартала - это одно из 1 января, 1 апреля, 1 июля, 1 октября. Возвращается дата.

    toStartOfMonth​

    Округляет дату или дату-с-временем вниз до первого дня месяца. Возвращается дата.

    toLastDayOfMonth​

    Округляет дату или дату-с-временем до последнего числа месяца. Возвращается дата.

    Возвращаемое значение для некорректных дат зависит от реализации. ClickHouse может вернуть нулевую дату, выбросить исключение, или выполнить «естественное» перетекание дат между месяцами.

    toMonday​

    Округляет дату или дату-с-временем вниз до ближайшего понедельника. Возвращается дата.

    toStartOfWeek(t[, mode [, timezone] ])​

    Округляет дату или дату-с-временем назад, до ближайшего воскресенья или понедельника, в соответствии с mode. Возвращается дата. Аргумент mode работает точно так же, как аргумент mode toWeek(). Если аргумент mode опущен, то используется режим 0.

    toLastDayOfWeek(t[, mode [, timezone] ])​

    Округляет дату или дату-с-временем вперёд, до ближайшей субботы или воскресенья, в соответствии с mode. Возвращается дата. Аргумент mode работает точно так же, как аргумент mode toWeek(). Если аргумент mode опущен, то используется режим 0.

    toStartOfDay​

    Округляет дату-с-временем вниз до начала дня. Возвращается дата-с-временем.

    toStartOfHour​

    Округляет дату-с-временем вниз до начала часа.

    toStartOfMinute​

    Округляет дату-с-временем вниз до начала минуты.

    toStartOfSecond​

    Отсекает доли секунды.

    Синтаксис

    toStartOfSecond(value, [timezone]) 

    Аргументы

    • value — дата и время. DateTime64.
    • timezone — часовой пояс для возвращаемого значения (необязательно). Если параметр не задан, используется часовой пояс параметра value . String.

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

    • Входное значение с отсеченными долями секунды.

    Примеры

    Пример без часового пояса:

    WITH toDateTime64('2020-01-01 10:20:30.999', 3) AS dt64 SELECT toStartOfSecond(dt64); 
    ┌───toStartOfSecond(dt64)─┐ │ 2020-01-01 10:20:30.000 │ └─────────────────────────┘ 

    Пример с часовым поясом:

    WITH toDateTime64('2020-01-01 10:20:30.999', 3) AS dt64 SELECT toStartOfSecond(dt64, 'Europe/Moscow'); 
    ┌─toStartOfSecond(dt64, 'Europe/Moscow')─┐ │ 2020-01-01 13:20:30.000 │ └────────────────────────────────────────┘ 

    Смотрите также

    • Часовая зона сервера, конфигурационный параметр timezone.

    toStartOfFiveMinutes​

    Округляет дату-с-временем вниз до начала пятиминутного интервала.

    toStartOfTenMinutes​

    Округляет дату-с-временем вниз до начала десятиминутного интервала.

    toStartOfFifteenMinutes​

    Округляет дату-с-временем вниз до начала пятнадцатиминутного интервала.

    toStartOfInterval(time_or_data, INTERVAL x unit [ , time_zone ] )​

    Обобщение остальных функций toStartOf* . Например, toStartOfInterval(t, INTERVAL 1 year) возвращает то же самое, что и toStartOfYear(t) , toStartOfInterval(t, INTERVAL 1 month) возвращает то же самое, что и toStartOfMonth(t) , toStartOfInterval(t, INTERVAL 1 day) возвращает то же самое, что и toStartOfDay(t) , toStartOfInterval(t, INTERVAL 15 minute) возвращает то же самое, что и toStartOfFifteenMinutes(t) , и т.п.

    toTime​

    Переводит дату-с-временем на некоторую фиксированную дату, сохраняя при этом время.

    toRelativeYearNum​

    Переводит дату или дату-с-временем в номер года, начиная с некоторого фиксированного момента в прошлом.

    toRelativeQuarterNum​

    Переводит дату или дату-с-временем в номер квартала, начиная с некоторого фиксированного момента в прошлом.

    toRelativeMonthNum​

    Переводит дату или дату-с-временем в номер месяца, начиная с некоторого фиксированного момента в прошлом.

    toRelativeWeekNum​

    Переводит дату или дату-с-временем в номер недели, начиная с некоторого фиксированного момента в прошлом.

    toRelativeDayNum​

    Переводит дату или дату-с-временем в номер дня, начиная с некоторого фиксированного момента в прошлом.

    toRelativeHourNum​

    Переводит дату-с-временем в номер часа, начиная с некоторого фиксированного момента в прошлом.

    toRelativeMinuteNum​

    Переводит дату-с-временем в номер минуты, начиная с некоторого фиксированного момента в прошлом.

    toRelativeSecondNum​

    Переводит дату-с-временем в номер секунды, начиная с некоторого фиксированного момента в прошлом.

    toISOYear​

    Переводит дату или дату-с-временем в число типа UInt16, содержащее номер ISO года. ISO год отличается от обычного года, потому что в соответствии с ISO 8601:1988 ISO год начинается необязательно первого января.

    Пример

    SELECT  toDate('2017-01-01') AS date,  toYear(date),  toISOYear(date) 
    ┌───────date─┬─toYear(toDate('2017-01-01'))─┬─toISOYear(toDate('2017-01-01'))─┐ │ 2017-01-01 │ 2017 │ 2016 │ └────────────┴──────────────────────────────┴─────────────────────────────────┘ 

    toISOWeek​

    Переводит дату или дату-с-временем в число типа UInt8, содержащее номер ISO недели. Начало ISO года отличается от начала обычного года, потому что в соответствии с ISO 8601:1988 первая неделя года - это неделя с четырьмя или более днями в этом году.

    1 Января 2017 г. - воскресение, т.е. первая ISO неделя 2017 года началась в понедельник 2 января, поэтому 1 января 2017 это последняя неделя 2016 года.

    Пример

    SELECT  toISOWeek(toDate('2017-01-01')) AS ISOWeek20170101,  toISOWeek(toDate('2017-01-02')) AS ISOWeek20170102 
    ┌─ISOWeek20170101─┬─ISOWeek20170102─┐ │ 52 │ 1 │ └─────────────────┴─────────────────┘ 

    toWeek(date [ , mode ] [ , timezone ] )​

    Переводит дату или дату-с-временем в число UInt8, содержащее номер недели. Второй аргументам mode задает режим, начинается ли неделя с воскресенья или с понедельника и должно ли возвращаемое значение находиться в диапазоне от 0 до 53 или от 1 до 53. Если аргумент mode опущен, то используется режим 0.

    toISOWeek() эквивалентно toWeek(date,3) .

    Описание режимов (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 – это неделя содержащая 1 января. Не имеет значения, сколько дней в новом году содержала неделя, даже если она содержала только один день.

    Пример

    SELECT toDate('2016-12-27') AS date, toWeek(date) AS week0, toWeek(date,1) AS week1, toWeek(date,9) AS week9; 
    ┌───────date─┬─week0─┬─week1─┬─week9─┐ │ 2016-12-27 │ 52 │ 52 │ 1 │ └────────────┴───────┴───────┴───────┘ 

    toYearWeek(date [,mode] )​

    Возвращает год и неделю для даты. Год в результате может отличаться от года в аргументе даты для первой и последней недели года.

    Аргумент mode работает так же, как аргумент mode toWeek(), значение mode по умолчанию -- 0 .

    toISOYear() эквивалентно intDiv(toYearWeek(date,3),100)

    Однако, есть отличие в работе функций toWeek() и toYearWeek() . toWeek() возвращает номер недели в контексте заданного года, и в случае, когда toWeek() вернёт 0 , toYearWeek() вернёт значение, соответствующее последней неделе предыдущего года (см. prev_yearWeek в примере).

    Пример

    SELECT toDate('2016-12-27') AS date, toYearWeek(date) AS yearWeek0, toYearWeek(date,1) AS yearWeek1, toYearWeek(date,9) AS yearWeek9, toYearWeek(toDate('2022-01-01')) AS prev_yearWeek; 
    ┌───────date─┬─yearWeek0─┬─yearWeek1─┬─yearWeek9─┬─prev_yearWeek─┐ │ 2016-12-27 │ 201652 │ 201652 │ 201701 │ 202152 │ └────────────┴───────────┴───────────┴───────────┴───────────────┘ 

    age​

    Вычисляет компонент unit разницы между startdate и enddate . Разница вычисляется с точностью в 1 микросекунду. Например, разница между 2021-12-29 и 2022-01-01 3 дня для единицы day , 0 месяцев для единицы month , 0 лет для единицы year .

    Синтаксис

    age('unit', startdate, enddate, [timezone]) 

    Аргументы

    • unit — единица измерения времени, в которой будет выражено возвращаемое значение функции. String. Возможные значения:
      • microsecond (возможные сокращения: us , u )
      • millisecond (возможные сокращения: ms )
      • second (возможные сокращения: ss , s )
      • minute (возможные сокращения: mi , n )
      • hour (возможные сокращения: hh , h )
      • day (возможные сокращения: dd , d )
      • week (возможные сокращения: wk , ww )
      • month (возможные сокращения: mm , m )
      • quarter (возможные сокращения: qq , q )
      • year (возможные сокращения: yyyy , yy )

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

      Разница между enddate и startdate , выраженная в unit .

      Пример

      SELECT age('hour', toDateTime('2018-01-01 22:30:00'), toDateTime('2018-01-02 23:00:00')); 
      ┌─age('hour', toDateTime('2018-01-01 22:30:00'), toDateTime('2018-01-02 23:00:00'))─┐ │ 24 │ └───────────────────────────────────────────────────────────────────────────────────┘ 
      SELECT  toDate('2022-01-01') AS e,  toDate('2021-12-29') AS s,  age('day', s, e) AS day_age,  age('month', s, e) AS month__age,  age('year', s, e) AS year_age; 
      ┌──────────e─┬──────────s─┬─day_age─┬─month__age─┬─year_age─┐ │ 2022-01-01 │ 2021-12-29 │ 3 │ 0 │ 0 │ └────────────┴────────────┴─────────┴────────────┴──────────┘ 

      date _ diff​

      Вычисляет разницу указанных границ unit пересекаемых между startdate и enddate .

      Синтаксис

      date_diff('unit', startdate, enddate, [timezone]) 

      Синонимы: dateDiff , DATE_DIFF .

      Аргументы

      • unit — единица измерения времени, в которой будет выражено возвращаемое значение функции. String. Возможные значения:
        • microsecond (возможные сокращения: us , u )
        • millisecond (возможные сокращения: ms )
        • second (возможные сокращения: ss , s )
        • minute (возможные сокращения: mi , n )
        • hour (возможные сокращения: hh , h )
        • day (возможные сокращения: dd , d )
        • week (возможные сокращения: wk , ww )
        • month (возможные сокращения: mm , m )
        • quarter (возможные сокращения: qq , q )
        • year (возможные сокращения: yyyy , yy )

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

        Разница между enddate и startdate , выраженная в unit .

        Пример

        SELECT dateDiff('hour', toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00')); 
        ┌─dateDiff('hour', toDateTime('2018-01-01 22:00:00'), toDateTime('2018-01-02 23:00:00'))─┐ │ 25 │ └────────────────────────────────────────────────────────────────────────────────────────┘ 

        date_trunc​

        Отсекает от даты и времени части, меньшие чем указанная часть.

        Синтаксис

        date_trunc(unit, value[, timezone]) 

        Аргументы

        • unit — единица измерения времени, в которой задана отсекаемая часть. String Literal. Возможные значения:
          • second
          • minute
          • hour
          • day
          • week
          • month
          • quarter
          • year

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

          • Дата и время, отсеченные до указанной части.

          Примеры

          Запрос без указания часового пояса:

          SELECT now(), date_trunc('hour', now()); 
          ┌───────────────now()─┬─date_trunc('hour', now())─┐ │ 2020-09-28 10:40:45 │ 2020-09-28 10:00:00 │ └─────────────────────┴───────────────────────────┘ 

          Запрос с указанием часового пояса:

          SELECT now(), date_trunc('hour', now(), 'Europe/Moscow'); 
          ┌───────────────now()─┬─date_trunc('hour', now(), 'Europe/Moscow')─┐ │ 2020-09-28 10:46:26 │ 2020-09-28 13:00:00 │ └─────────────────────┴────────────────────────────────────────────┘ 

          Смотрите также

          date _ add​

          Добавляет интервал времени или даты к указанной дате или дате со временем.

          Синтаксис

          date_add(unit, value, date) 

          Синонимы: dateAdd , DATE_ADD .

          Аргументы

          • unit — единица измерения времени, в которой задан интервал для добавления. String. Возможные значения:
            • second
            • minute
            • hour
            • day
            • week
            • month
            • quarter
            • year

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

            Дата или дата со временем, полученная в результате добавления value , выраженного в unit , к date .

            Пример

            SELECT date_add(YEAR, 3, toDate('2018-01-01')); 
            ┌─plus(toDate('2018-01-01'), toIntervalYear(3))─┐ │ 2021-01-01 │ └───────────────────────────────────────────────┘ 

            date _ sub​

            Вычитает интервал времени или даты из указанной даты или даты со временем.

            Синтаксис

            date_sub(unit, value, date) 

            Синонимы: dateSub , DATE_SUB .

            Аргументы

            • unit — единица измерения времени, в которой задан интервал для вычитания. String. Возможные значения:
              • second
              • minute
              • hour
              • day
              • week
              • month
              • quarter
              • year

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

              Дата или дата со временем, полученная в результате вычитания value , выраженного в unit , из date .

              Пример

              SELECT date_sub(YEAR, 3, toDate('2018-01-01')); 
              ┌─minus(toDate('2018-01-01'), toIntervalYear(3))─┐ │ 2015-01-01 │ └────────────────────────────────────────────────┘ 

              timestamp _ add​

              Добавляет интервал времени к указанной дате или дате со временем.

              Синтаксис

              timestamp_add(date, INTERVAL value unit) 

              Синонимы: timeStampAdd , TIMESTAMP_ADD .

              Аргументы

              • date — дата или дата со временем. Date или DateTime.
              • value — значение интервала для добавления. Int.
              • unit — единица измерения времени, в которой задан интервал для добавления. String. Возможные значения:
                • second
                • minute
                • hour
                • day
                • week
                • month
                • quarter
                • year

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

                Дата или дата со временем, полученная в результате добавления value , выраженного в unit , к date .

                Пример

                select timestamp_add(toDate('2018-01-01'), INTERVAL 3 MONTH); 
                ┌─plus(toDate('2018-01-01'), toIntervalMonth(3))─┐ │ 2018-04-01 │ └────────────────────────────────────────────────┘ 

                timestamp _ sub​

                Вычитает интервал времени из указанной даты или даты со временем.

                Синтакис

                timestamp_sub(unit, value, date) 

                Синонимы: timeStampSub , TIMESTAMP_SUB .

                Аргументы

                • unit — единица измерения времени, в которой задан интервал для вычитания. String. Возможные значения:
                  • second
                  • minute
                  • hour
                  • day
                  • week
                  • month
                  • quarter
                  • year

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

                  Дата или дата со временем, полученная в результате вычитания value , выраженного в unit , из date .

                  Пример

                  select timestamp_sub(MONTH, 5, toDateTime('2018-12-18 01:02:03')); 
                  ┌─minus(toDateTime('2018-12-18 01:02:03'), toIntervalMonth(5))─┐ │ 2018-07-18 01:02:03 │ └──────────────────────────────────────────────────────────────┘ 

                  now​

                  Возвращает текущую дату и время.

                  Синтаксис

                  now([timezone]) 

                  Параметры

                  • timezone — часовой пояс для возвращаемого значения (необязательно). String.

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

                  • Текущие дата и время.

                  Пример

                  Запрос без указания часового пояса:

                  SELECT now(); 
                  ┌───────────────now()─┐ │ 2020-10-17 07:42:09 │ └─────────────────────┘ 

                  Запрос с указанием часового пояса:

                  SELECT now('Europe/Moscow'); 
                  ┌─now('Europe/Moscow')─┐ │ 2020-10-17 10:42:23 │ └──────────────────────┘ 

                  nowInBlock​

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

                  Имеет смысл использовать данную функцию для получения времени сейчас при длительных запросов INSERT SELECT.

                  today​

                  Возвращает текущую дату на момент выполнения запроса. Функция не требует аргументов. То же самое, что toDate(now())

                  yesterday​

                  Возвращает вчерашнюю дату на момент выполнения запроса. Делает то же самое, что today() - 1. Функция не требует аргументов.

                  timeSlot​

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

                  timeSlots(StartTime, Duration, [ , Size ] )​

                  Для интервала, начинающегося в StartTime и длящегося Duration секунд, возвращает массив моментов времени, кратных Size . Параметр Size указывать необязательно, по умолчанию он равен 1800 секундам (30 минутам) - необязательный параметр.

                  Возвращает массив DateTime/DateTime64 (тип будет совпадать с типом параметра ’StartTime’). Для DateTime64 масштаб(scale) возвращаемой величины может отличаться от масштаба фргумента ’StartTime’ --- результат будет иметь наибольший масштаб среди всех данных аргументов.

                  SELECT timeSlots(toDateTime('2012-01-01 12:20:00'), toUInt32(600)); SELECT timeSlots(toDateTime('1980-12-12 21:01:02', 'UTC'), toUInt32(600), 299); SELECT timeSlots(toDateTime64('1980-12-12 21:01:02.1234', 4, 'UTC'), toDecimal64(600.1, 1), toDecimal64(299, 0)); 
                  ┌─timeSlots(toDateTime('2012-01-01 12:20:00'), toUInt32(600))─┐ │ ['2012-01-01 12:00:00','2012-01-01 12:30:00'] │ └─────────────────────────────────────────────────────────────┘ ┌─timeSlots(toDateTime('1980-12-12 21:01:02', 'UTC'), toUInt32(600), 299)─┐ │ ['1980-12-12 20:56:13','1980-12-12 21:01:12','1980-12-12 21:06:11'] │ └─────────────────────────────────────────────────────────────────────────┘ ┌─timeSlots(toDateTime64('1980-12-12 21:01:02.1234', 4, 'UTC'), toDecimal64(600.1, 1), toDecimal64(299, 0))─┐ │ ['1980-12-12 20:56:13.0000','1980-12-12 21:01:12.0000','1980-12-12 21:06:11.0000'] │ └───────────────────────────────────────────────────────────────────────────────────────────────────────────┘ 

                  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​

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

                  Синтаксис

                  formatDateTime(Time, Format[, Timezone]) 

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

                  Возвращает значение времени и даты в определенном вами формате.

                  Поля подстановки

                  Используйте поля подстановки для того, чтобы определить шаблон для выводимой строки. В колонке «Пример» результат работы функции для времени 2018-01-02 22:33:44 .

                  Поле Описание Пример
                  %C номер года, поделённый на 100 (00-99) 20
                  %d день месяца, с ведущим нулём (01-31) 02
                  %D короткая запись %m/%d/%y 01/02/18
                  %e день месяца, с ведущим пробелом ( 1-31) 2
                  %F короткая запись %Y-%m-%d 2018-01-02
                  %G четырехзначный формат вывода ISO-года, который основывается на особом подсчете номера недели согласно стандарту ISO 8601, обычно используется вместе с %V 2018
                  %g двузначный формат вывода года по стандарту ISO 8601 18
                  %H час в 24-часовом формате (00-23) 22
                  %I час в 12-часовом формате (01-12) 10
                  %j номер дня в году, с ведущими нулями (001-366) 002
                  %m месяц, с ведущим нулём (01-12) 01
                  %M минуты, с ведущим нулём (00-59) 33
                  %n символ переноса строки (‘’)
                  %p обозначения AM или PM PM
                  %Q квартал (1-4) 1
                  %R короткая запись %H:%M 22:33
                  %S секунды, с ведущими нулями (00-59) 44
                  %t символ табуляции (’)
                  %T формат времени ISO 8601, одинаковый с %H:%M:%S 22:33:44
                  %u номер дня недели согласно ISO 8601, понедельник - 1, воскресенье - 7 2
                  %V номер недели согласно ISO 8601 (01-53) 01
                  %w номер дня недели, начиная с воскресенья (0-6) 2
                  %y год, последние 2 цифры (00-99) 18
                  %Y год, 4 цифры 2018
                  %z Смещение времени от UTC +HHMM или -HHMM -0500
                  %% символ % %

                  Пример

                  SELECT formatDateTime(toDate('2010-01-04'), '%g'); 

                  Что делают в SQL текущая дата и другие функции даты и времени

                  Функция текущей даты SQL CURDATE() и её аналоги CURRENT_DATE() и CURRENT_DATE среди других функций даты и времени применяются наиболее часто из-за широких возможностей, обеспечиваемых ими для анализа данных. Знакомство с функциями даты и времени начнём с разбора практических примеров, демонстрирующих возможности функции текущей даты. А затем перейдём к остальным функциям даты и времени, соблюдая для удобства их классификацию по назначению.

                  Функция текущей даты SQL, её возможности

                  Функция текущей даты CURDATE() возвращает значение текущей даты в формате 'YYYY-MM-DD' и 'YYYYDDMM'. Вычисляя несколькими способами (их как раз и разберём в этом параграфе) разницу значений дат, можно определить такие важные значения, как возраст человека, его трудовой стаж, продолжительность различных процессов и явлений и многое другое.

                  В примерах работаем с базой данных "Театр". Таблица Play содержит данные о постановках. Таблица Team - о ролях актёров. Таблица Actor - об актёрах. Таблица Director - о режиссёрах. Поля таблиц, первичные и внешние ключи можно увидеть на рисунке ниже (для увеличения нажать левой кнопкой мыши).

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

                  Пример 1. Сформировать список актеров старше 70 лет. Пишем следующий запрос:

                  SELECT FName, LName, BirthDate FROM ACTOR WHERE TIMESTAMPDIFF ( YEAR , BirthDate, CURDATE() ) > 70

                  В этом запросе вычисляется разница между текущей датой CURDATE() и датой рождения актёра BirthDate, содержащейся в таблице ACTOR. Для вычисления разницы применена функция TIMESTAMPDIFF(). Ключевое слово YEAR - задаёт единицу измерения - в годах интервала между датами. Вычисленное значение и результат его сравнения с числом 70 вполне пригодны в качестве условия выборки в секции WHERE. Следует учесть, что функция TIMESTAMPDIFF() существует лишь в MySQL. В других диалектах SQL для этого есть функция DATEDIFF, а для задания единицы измерения применяются различные ключевые слова в различных вариантах написания.

                  Для вычисления разницы дат можно использовать и оператор "минус". Это сделано в следующем примере.

                  Пример 2. Вывести список актеров, которые не задействованы в новых постановках (в постановках последних 3 лет). Использовать CURDATE(), NOT IN. Запрос будет следующим:

                  SELECT fname, lname FROM actor WHERE actor_id NOT IN ( SELECT actor_id FROM team WHERE play_id IN ( SELECT play_id FROM play WHERE YEAR (premieredate) - YEAR(CURDATE() ) SELECT DISTINCT a.Actor_ID, a.FName, a.LName, CURDATE() - p1.PremiereDate AS ExpDays FROM Play p1 JOIN Team t1 ON p1.play_id = t1.play_id JOIN Actor a ON t1.actor_id = a.Actor_id WHERE t1.ACTOR_ID = a.Actor_ID ORDER BY ExpDays, a.Actor_ID DESC

                  В этом запросе разница между текущей датой CURDATE() и датой премьеры постановки PremiereDate из таблицы Play вычисляется как имя столбца в результирующей таблице. Поскольку эти даты имеют один и тот же формат, для вычисления разницы достаточно использовать оператор "минус". Разница вычислена. Но из таблицы Play невозможно напрямую "достучаться" до таблицы Actor, содержащей данные об актёрах. Поэтому используем соединение (JOIN) этой таблицы с таблицей Team, которая уже связана с таблицей Actor при помощи ключа Actor_ID. Соединение таблиц Team и Actor - второе в этой цепочке из трёх таблиц.

                  Составить SQL запросы с текущей датой самостоятельно, а затем посмотреть решения

                  Пример 4. Определить самого востребованного актера за последние 5 лет. Оператор JOIN использовать 2 раза. Использовать CURDATE(), LIMIT 1.

                  Пример 5. Определить спектакли, в которых средний возраст актеров от 20 до 30 (использовать BETWEEN, GROUP BY, AVG).

                  В последующих параграфах приведено большинство функций даты и времени, используемых в СУБД MySQL. А примеры использования наиболее часто применимых в MS SQL Server функций DATEDIFF и DATEADD приведены соответственно на странице 2 и странице 3.

                  Функции, возвращающие текущие дату, время, дату и время

                  CURDATE(), CURRENT_DATE(), CURRENT_DATE - возвращают текущую дату в формате 'YYYY-MM-DD' или YYYYDDMM в зависимости от того, вызывается функция в текстовом или числовом контексте.

                  CURTIME(), CURRENT_TIME(), CURRENT_TIME - возвращают текущее время суток в формате 'hh-mm-ss' или hhmmss в зависимости от того, вызывается функция в текстовом или числовом контексте.

                  NOW() - возвращает текущие дату и время формате 'YYYY-MM-DD hh:mm:ss' или YYYYDDMMhhmmss в зависимости от того, вызывается функция в текстовом или числовом контексте.

                  Функции для вычисления разницы между моментами

                  TIMEDIFF(param1, param2) - возвращает разницу между значениями времени, заданными параметрами param1 и param2.

                  DATEDIFF(param1, param2) - возвращает разницу между датами param1 и param2. Значения param1 и param2 могут иметь типы DATE или DATETIME, а при вычислении разницы используется лишь часть DATE.

                  PERIOD_DIFF(param1, param2) - возвращает разницу в месяцах между датами param1 и param2. Значения param1 и param2 могут быть представлены в числовом формате YYYYMM или YYMM.

                  TIMESTAMPDIFF(interval, param1, param2) - возвращает разницу между значениями датами param1 и param2. Значения param1 и param2 могут быть представлены в форматах 'YYYY-MM-DD' или 'YYYY-MM-DD hh:mm:ss'. Единица измерения разницы задаётся параметром interval. Он может принимать значения FRAC_SECOND (микросекунды), SECOND (секунды), MINUTE (минуты), HOUR (часы), DAY (дни), WEEK (недели), MONTH (месяцы), QUARTER (кварталы), YEAR (годы).

                  Функции для добавления (или вычитания) некоторого значения к моменту

                  ADDDATE(date, INTERVAL value) - возвращает дату, к которой прибавлено значение value. Ключевое слово INTERVAL обязательно следует в запросе, после него указывается значение value, а затем единицы измерения прибавляемого значения. Ими могут быть SECOND (секунды), MINUTE (минуты), HOUR (часы), MINUTE_SECOND (минуты и секунды), HOUR_MINUTE (часы и минуты), DAY_SECOND (дни, часы минуты и секунды), DAY_MINUTE (дни, часы и минуты), DAY_HOUR (дни и часы), YEAR_MONTH (годы и месяцы).

                  SUBDATE(date, INTERVAL value) - вычитает из величины даты date произвольный временной интервал и возвращает результат. Ключевое слово INTERVAL обязательно следует в запросе, после него указывается значение value, а затем единицы измерения вычитаемого значения. Возможные единицы измерения - те же, что и для функции ADDDATE().

                  SUBTIME(datetime, time) - вычитает из величины времени datetime вида 'YYYY-MM-DD hh:mm:ss' произвольно заданное значение времени time и возвращает результат.

                  PERIOD_ADD(period, N) - добавляет N месяцев к значению даты period. Значение period должно быть представлено в числовом формате 'YYYYMM' или 'YYMM'.

                  TIMESTAMPADD(interval, param1, param2) - прибавляет к дате и времени суток param2 в полном или кратком формате временной интервал param1, единицы измерения которого заданы параметром interval. Возможные единицы измерения - те же, что и для функции TIMESTAMPDIFF().

                  Функции, характеризующие момент (значение аргумента)

                  DATE(datetime) - извлекает из значения даты и времени суток в формате DATETIME ('YYYY-MM-DD hh:mm:ss') только дату, отсекая часы, минуты и секунды.

                  TIME(datetime) - извлекает из значения даты и времени суток в формате DATETIME ('YYYY-MM-DD hh:mm:ss') только время суток, отсекая дату.

                  TIMESTAMP(param) - принимает в качестве аргумента дату и время суток в полном или кратком формате и возвращает полный вариант в формате DATETIME ('YYYY-MM-DD hh:mm:ss').

                  DAY(date), DAYOFMONTH(date) - принимают в качестве аргумента дату, и возвращают порядковый номер дня в месяце (от 1 до 31).

                  DAYNAME(date) - принимает в качестве аргумента дату, и возвращает день недели в виде полного слова на английском языке.

                  DAYOFWEEK(date) - принимает в качестве аргумента дату, и возвращает порядкоый номер дня недели от 1 (воскресенье) до 7 (суббота).

                  WEEKDAY(date) - принимает в качестве аргумента дату, и возвращает порядкоый номер дня недели от 0 (понедельник) до 6 (воскресенье).

                  WEEK(date) - принимает в качестве аргумента дату, и возвращает номер недели в году для этой даты от 0 до 53.

                  WEEKOFYEAR(datetime) - возвращает порядковый номер недели в году для даты datetime от 1 до 53.

                  MONTH(datetime) - возвращает числовое значение месяца года от 1 до 12 для даты datetime.

                  MONTHNAME(datetime) - возвращает строку с названием месяца для даты datetime.

                  QUARTER(datetime) - возвращает значение квартала от 1 до 4 для даты datetime, которая может быть передана в формате 'YYYY-MM-DD' или 'YYYY-MM-DD hh:mm:ss'.

                  YEAR(datetime) - возвращает год от 1000 до 9999 для даты datetime.

                  DAYOFYEAR(date) - возвращает порядковый номер дня в году от 1 до 366 для даты date.

                  HOUR(datetime) - возвращает значение часа от 0 до 23 для времени datetime.

                  MINUTE(datetime) - возвращает значение минут от 0 до 59 для времени datetime.

                  SECOND(time) - возвращает количество секунд для времени суток time, которое задаётся либо в виде строки 'hh:mm:ss', либо числа hhmmss.

                  EXTRACT(type FROM datetime) - принимает дату и время суток datetime и возвращает часть, определяемую параметром type. Значениями параметра могут быть YEAR, MONTH, DAY, HOUR, MINUTE, SECOND.

                  Функции для преобразования разницы в дни и секунды

                  TO_DAYS(date) - принимает дату date в кратком 'YYYY-MM-DD' или полном формате 'YYYY-MM-DD hh:mm:ss' и возвращает количество дней, прошедших с нулевого года.

                  FROM_DAYS(N) - принимает количество дней N, прошедших с нулевого года, и возвращает дату в формате 'YYYY-MM-DD'.

                  UNIX_TIMESTAMP(), UNIX_TIMESTAMP(datetime) - если параметр не указан, то возвращает количество секунд, прошедших с 00:00 1 января 1970 года. Если параметр datetime указан (в кратком 'YYYY-MM-DD' или полном формате 'YYYY-MM-DD hh:mm:ss'), то возвращает разницу в секундах между 00:00 1 января 1970 года и датой datetime.

                  FROM_UNIXTIME(unix_timestamp), FROM_UNIXTIME(unix_timestamp, format) - принимает количество секунд, прошедших с 00:00 1 января 1970 года и возвращает дату и время суток в виде строки 'YYYY-MM-DD hh:mm:ss' или в виде числа YYYYDDMMhhmmss в зависимости от того, вызвана функция в строковом или числовом контексте.

                  TIME_TO_SEC(time) - принимает время суток time в формате 'hh:mm:ss' и возвращает количество секунд, прошедших с начала суток.

                  SEC_TO_TIME(seconds) - принимает количество секунд seconds, прошедших с начала суток и возвращает время в формате 'hh:mm:ss' или hhmmss в зависимости от того, вызвана функция в строковом или числовом контексте.

                  MAKEDATE(year, dayofyear) - принимает год year, номер дня в году dayofyear и возвращает дату в формате 'YYYY-MM-DD'.

                  MAKETIME(hour, minute, second) - принимает часы hour, минуты minute и секунды second и возвращает время суток в формате 'hh:mm:ss'.

                  • Функция текущей даты SQL, её возможности
                  • Функции, возвращающие текущие дату, время, дату и время
                  • Функции для вычисления разницы между моментами
                  • Функции для добавления некоторого значения к моменту
                  • Функции, характеризующие момент (значение аргумента)
                  • Функции для преобразования разницы в дни и секунды
                  • Примеры с функцией DATEDIFF MS SQL Server
                  • Примеры с функцией DATEADD MS SQL Server

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

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

https://alkogolizm.vyvod-iz-zapoya-v-stacionare-samara11.ru/