Функции и операторы даты и времени#
Эти функции и операторы работают с типами данных даты и времени.
Операторы даты и времени#
Оператор |
Пример |
Результат |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Преобразование часового пояса#
Оператор AT TIME ZONE задает часовой пояс для timestamp:
SELECT timestamp '2012-10-31 01:00 UTC';
-- 2012-10-31 01:00:00.000 UTC
SELECT timestamp '2012-10-31 01:00 UTC' AT TIME ZONE 'America/Los_Angeles';
-- 2012-10-30 18:00:00.000 America/Los_Angeles
Функции даты и времени#
- current_date#
Возвращает текущую дату на момент начала выполнения запроса.
- current_time#
Возвращает текущее время с часовым поясом на момент начала выполнения запроса.
- current_timestamp#
Возвращает текущий timestamp с часовым поясом на момент начала выполнения запроса, с
3знаками дробной части секунды,
- current_timestamp(p)
Возвращает текущий timestamp with time zone на момент начала выполнения запроса, с
pзнаками дробной части секунды:SELECT current_timestamp(6); -- 2020-06-24 08:25:31.759993 America/Los_Angeles
- current_timezone() varchar#
Возвращает текущий часовой пояс в формате, определенном IANA (например,
America/Los_Angeles), или как фиксированное смещение от UTC (например,+08:35)
- date(x) date#
Это псевдоним для
CAST(x AS date).
- last_day_of_month(x) date#
Возвращает последний день месяца.
- from_iso8601_timestamp(string) timestamp(3) with time zone#
Разбирает дату
stringв формате ISO 8601, опционально со временем и часовым поясом, вtimestamp(3) with time zone. По умолчанию время равно00:00:00.000, а часовой пояс - часовому поясу сессии:SELECT from_iso8601_timestamp('2020-05-11'); -- 2020-05-11 00:00:00.000 America/Vancouver SELECT from_iso8601_timestamp('2020-05-11T11:15:05'); -- 2020-05-11 11:15:05.000 America/Vancouver SELECT from_iso8601_timestamp('2020-05-11T11:15:05.055+01:00'); -- 2020-05-11 11:15:05.055 +01:00
- from_iso8601_timestamp_nanos(string) timestamp(9) with time zone#
Разбирает дату и время
stringв формате ISO 8601. Часовой пояс по умолчанию берется из часового пояса сессии:SELECT from_iso8601_timestamp_nanos('2020-05-11T11:15:05'); -- 2020-05-11 11:15:05.000000000 America/Vancouver SELECT from_iso8601_timestamp_nanos('2020-05-11T11:15:05.123456789+01:00'); -- 2020-05-11 11:15:05.123456789 +01:00
- from_iso8601_date(string) date#
Разбирает дату
stringв формате ISO 8601 вdate. Дата может быть календарной датой, датой недели с использованием ISO-нумерации недель, или комбинацией года и дня года:SELECT from_iso8601_date('2020-05-11'); -- 2020-05-11 SELECT from_iso8601_date('2020-W10'); -- 2020-03-02 SELECT from_iso8601_date('2020-123'); -- 2020-05-02
- at_timezone(timestamp(p) with time zone, zone) timestamp(p) with time zone#
Преобразует
timestamp(p) with time zoneв часовой пояс, заданный вzone.В следующем примере входной часовой пояс -
GMT, который в ноябре 2022 года опережаетAmerica/Los_Angelesна семь часов:SELECT at_timezone(TIMESTAMP '2022-11-01 09:08:07.321 GMT', 'America/Los_Angeles') -- 2022-11-01 02:08:07.321 America/Los_Angeles
- with_timezone(timestamp(p), zone) timestamp(p) with time zone#
Возвращает timestamp, указанный в
timestamp, с часовым поясом, заданным вzone, с точностьюp:SELECT current_timezone() -- America/New_York SELECT with_timezone(TIMESTAMP '2022-11-01 09:08:07.321', 'America/Los_Angeles') -- 2022-11-01 09:08:07.321 America/Los_Angeles
- from_unixtime(unixtime) timestamp(3) with time zone#
Возвращает UNIX timestamp
unixtimeкак timestamp с часовым поясом.unixtime- это количество секунд с1970-01-01 00:00:00 UTC.
- from_unixtime(unixtime, zone) timestamp(3) with time zone
Возвращает UNIX timestamp
unixtimeкак timestamp с часовым поясом, используяzoneв качестве часового пояса.unixtime- это количество секунд с1970-01-01 00:00:00 UTC.
- from_unixtime(unixtime, hours, minutes) timestamp(3) with time zone
Возвращает UNIX timestamp
unixtimeкак timestamp с часовым поясом, используяhoursиminutesкак смещение часового пояса.unixtime- это количество секунд с1970-01-01 00:00:00в типе данныхdouble.
- from_unixtime_nanos(unixtime) timestamp(9) with time zone#
Возвращает UNIX timestamp
unixtimeкак timestamp с часовым поясом.unixtime- это количество наносекунд с1970-01-01 00:00:00.000000000 UTC:SELECT from_unixtime_nanos(100); -- 1970-01-01 00:00:00.000000100 UTC SELECT from_unixtime_nanos(DECIMAL '1234'); -- 1970-01-01 00:00:00.000001234 UTC SELECT from_unixtime_nanos(DECIMAL '1234.499'); -- 1970-01-01 00:00:00.000001234 UTC SELECT from_unixtime_nanos(DECIMAL '-1234'); -- 1969-12-31 23:59:59.999998766 UTC
- localtime#
Возвращает текущее время на момент начала выполнения запроса.
- localtimestamp#
Возвращает текущий timestamp на момент начала выполнения запроса, с
3знаками дробной части секунды.
- localtimestamp(p)
Возвращает текущий timestamp на момент начала выполнения запроса, с
pзнаками дробной части секунды:SELECT localtimestamp(6); -- 2020-06-10 15:55:23.383628
- now() timestamp(3) with time zone#
Это псевдоним для
current_timestamp.
- to_iso8601(x) varchar#
Форматирует
xкак строку ISO 8601.xможет быть date, timestamp или timestamp with time zone.
- to_milliseconds(interval) bigint#
Возвращает day-to-second
intervalв миллисекундах.
- to_unixtime(timestamp) double#
Возвращает
timestampкак UNIX timestamp.
Note
Следующие функции стандарта SQL не используют скобки:
current_datecurrent_timecurrent_timestamplocaltimelocaltimestamp
Функция усечения#
Функция date_trunc поддерживает следующие единицы:
Единица |
Пример усеченного значения |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
В приведенных выше примерах в качестве входного значения используется
timestamp 2001-08-22 03:04:05.321.
- date_trunc(unit, x) [same as input]#
Возвращает
x, усеченный доunit:SELECT date_trunc('day' , TIMESTAMP '2022-10-20 05:10:00'); -- 2022-10-20 00:00:00.000 SELECT date_trunc('month' , TIMESTAMP '2022-10-20 05:10:00'); -- 2022-10-01 00:00:00.000 SELECT date_trunc('year', TIMESTAMP '2022-10-20 05:10:00'); -- 2022-01-01 00:00:00.000
Функции интервалов#
Функции в этом разделе поддерживают следующие единицы интервалов:
Единица |
Описание |
|---|---|
|
Миллисекунды |
|
Секунды |
|
Минуты |
|
Часы |
|
Дни |
|
Недели |
|
Месяцы |
|
Кварталы года |
|
Годы |
- date_add(unit, value, timestamp) [same as input]#
Добавляет interval
valueтипаunitкtimestamp. Вычитание можно выполнить, используя отрицательное значение:SELECT date_add('second', 86, TIMESTAMP '2020-03-01 00:00:00'); -- 2020-03-01 00:01:26.000 SELECT date_add('hour', 9, TIMESTAMP '2020-03-01 00:00:00'); -- 2020-03-01 09:00:00.000 SELECT date_add('day', -1, TIMESTAMP '2020-03-01 00:00:00 UTC'); -- 2020-02-29 00:00:00.000 UTC
- date_diff(unit, timestamp1, timestamp2) bigint#
Возвращает
timestamp2 - timestamp1, выраженное вunit:SELECT date_diff('second', TIMESTAMP '2020-03-01 00:00:00', TIMESTAMP '2020-03-02 00:00:00'); -- 86400 SELECT date_diff('hour', TIMESTAMP '2020-03-01 00:00:00 UTC', TIMESTAMP '2020-03-02 00:00:00 UTC'); -- 24 SELECT date_diff('day', DATE '2020-03-01', DATE '2020-03-02'); -- 1 SELECT date_diff('second', TIMESTAMP '2020-06-01 12:30:45.000000000', TIMESTAMP '2020-06-02 12:30:45.123456789'); -- 86400 SELECT date_diff('millisecond', TIMESTAMP '2020-06-01 12:30:45.000000000', TIMESTAMP '2020-06-02 12:30:45.123456789'); -- 86400123
Функция продолжительности#
Функция parse_duration поддерживает следующие единицы:
Единица |
Описание |
|---|---|
|
Наносекунды |
|
Микросекунды |
|
Миллисекунды |
|
Секунды |
|
Минуты |
|
Часы |
|
Дни |
- parse_duration(string) interval#
Разбирает
stringформатаvalue unitв interval, гдеvalue- дробное число значенийunit:SELECT parse_duration('42.8ms'); -- 0 00:00:00.043 SELECT parse_duration('3.81 d'); -- 3 19:26:24.000 SELECT parse_duration('5m'); -- 0 00:05:00.000
- human_readable_seconds(double) varchar#
Форматирует значение
secondsтипа double в удобочитаемую строку, содержащуюweeks,days,hours,minutesиseconds:SELECT human_readable_seconds(96); -- 1 minute, 36 seconds SELECT human_readable_seconds(3762); -- 1 hour, 2 minutes, 42 seconds SELECT human_readable_seconds(56363463); -- 93 weeks, 1 day, 8 hours, 31 minutes, 3 seconds
Функции даты MySQL#
Функции в этом разделе используют строку формата, совместимую с
функциями MySQL date_parse и str_to_date. Следующая таблица,
основанная на руководстве MySQL, описывает спецификаторы формата:
Спецификатор |
Описание |
|---|---|
|
Сокращенное название дня недели ( |
|
Сокращенное название месяца ( |
|
Месяц, числом ( |
|
День месяца с английским суффиксом ( |
|
День месяца, числом ( |
|
День месяца, числом ( |
|
Доля секунды (6 цифр при выводе: |
|
Час ( |
|
Час ( |
|
Час ( |
|
Минуты, числом ( |
|
День года ( |
|
Час ( |
|
Час ( |
|
Название месяца ( |
|
Месяц, числом ( |
|
|
|
Время суток, 12-часовой формат (эквивалентно |
|
Секунды ( |
|
Секунды ( |
|
Время суток, 24-часовой формат (эквивалентно |
|
Неделя ( |
|
Неделя ( |
|
Неделя ( |
|
Неделя ( |
|
Название дня недели ( |
|
День недели ( |
|
Год для недели, где воскресенье - первый день недели, числом, четыре цифры; используется с |
|
Год для недели, где понедельник - первый день недели, числом, четыре цифры; используется с |
|
Год, числом, четыре цифры |
|
Год, числом (две цифры); при разборе двухзначный формат года предполагает диапазон |
|
Буквальный символ |
|
|
Warning
Следующие спецификаторы в настоящее время не поддерживаются: %D %U %u %V %w %X
- date_format(timestamp, format) varchar#
Форматирует
timestampкак строку с использованиемformat:SELECT date_format(TIMESTAMP '2022-10-20 05:10:00', '%m-%d-%Y %H'); -- 10-20-2022 05
- date_parse(string, format) → timestamp(3)#
Разбирает
stringв timestamp с использованиемformat:SELECT date_parse('2022/10/20/05', '%Y/%m/%d/%H'); -- 2022-10-20 05:00:00.000
Функции даты Java#
Функции в этом разделе используют строку формата, совместимую с форматом шаблонов DateTimeFormat из JodaTime.
- format_datetime(timestamp, format) varchar#
Форматирует
timestampкак строку с использованиемformat.
- parse_datetime(string, format) timestamp with time zone#
Разбирает
stringв timestamp with time zone с использованиемformat.
Функция извлечения#
Функция extract поддерживает следующие поля:
Поле |
Описание |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Типы, поддерживаемые функцией extract, зависят от извлекаемого поля.
Большинство полей поддерживает все типы даты и времени.
- extract(field FROM x) bigint#
Возвращает
fieldизx:SELECT extract(YEAR FROM TIMESTAMP '2022-10-20 05:10:00'); -- 2022
Note
Эта функция стандарта SQL использует специальный синтаксис для указания аргументов.
Удобные функции извлечения#
- day(x) bigint#
Возвращает день месяца из
x.
- day_of_week(x) bigint#
Возвращает день недели по ISO из
x. Значение находится в диапазоне от1(понедельник) до7(воскресенье).
- day_of_year(x) bigint#
Возвращает день года из
x. Значение находится в диапазоне от1до366.
- dow(x) bigint#
Это псевдоним для
day_of_week().
- doy(x) bigint#
Это псевдоним для
day_of_year().
- hour(x) bigint#
Возвращает час дня из
x. Значение находится в диапазоне от0до23.
- millisecond(x) bigint#
Возвращает миллисекунду секунды из
x.
- minute(x) bigint#
Возвращает минуту часа из
x.
- month(x) bigint#
Возвращает месяц года из
x.
- quarter(x) bigint#
Возвращает квартал года из
x. Значение находится в диапазоне от1до4.
- second(x) bigint#
Возвращает секунду минуты из
x.
- timezone_hour(timestamp) bigint#
Возвращает час смещения часового пояса из
timestamp.
- timezone_minute(timestamp) bigint#
Возвращает минуту смещения часового пояса из
timestamp.
- year(x) bigint#
Возвращает год из
x.
- yow(x) bigint#
Это псевдоним для
year_of_week().
- timezone(timestamp(p) with time zone) varchar#
Возвращает идентификатор часового пояса из
timestamp(p) with time zone. Формат возвращаемого идентификатора идентичен формату, используемому во входном timestamp:SELECT timezone(TIMESTAMP '2024-01-01 12:00:00 Asia/Tokyo'); -- Asia/Tokyo SELECT timezone(TIMESTAMP '2024-01-01 12:00:00 +01:00'); -- +01:00 SELECT timezone(TIMESTAMP '2024-02-29 12:00:00 UTC'); -- UTC
- timezone(time(p) with time zone) varchar
Возвращает идентификатор часового пояса из
time(p) with time zone. Формат возвращаемого идентификатора идентичен формату, используемому во входном time:SELECT timezone(TIME '12:00:00+09:00'); -- +09:00