Функции для даты и времени
Функции для даты и времени — это функции для работы с данными типов DATE, TIME, TIMESTAMP и TIMESTAMPTZ.
Спецификаторы частей даты и времени
Следующие спецификаторы частей даты и времени могут быть использованы как отдельные функции, возвращающие соответствующие части от даты и времени:
-
century— век -
day— день -
decade— десятилетие -
hour— час -
microsecond— микросекунда -
millennium— тысячелетие -
millisecond— миллисекунда -
minute— минута -
month— месяц -
quarter— квартал -
second— секунда -
year— год
Примеры:
SELECT
century(now()) AS "current century",
day(now()) AS "current day",
decade(now()) AS "current decade",
hour(now()) AS "current hour",
microsecond(now()) AS "current microsecond",
millennium(now()) AS "current millennium",
millisecond(now()) AS "current millisecond",
minute(now()) AS "current minute",
month(now()) AS "current month",
quarter(now()) AS "current quarter",
second(now()) AS "current second",
year(now()) AS "current year";
+-----------------+-------------+----------------+--------------+---------------------+--------------------+---------------------+----------------+---------------+-----------------+----------------+--------------+
| current century | current day | current decade | current hour | current microsecond | current millennium | current millisecond | current minute | current month | current quarter | current second | current year |
+-----------------+-------------+----------------+--------------+---------------------+--------------------+---------------------+----------------+---------------+-----------------+----------------+--------------+
| 21 | 21 | 202 | 15 | 43089698 | 3 | 43089 | 5 | 5 | 2 | 43 | 2026 |
+-----------------+-------------+----------------+--------------+---------------------+--------------------+---------------------+----------------+---------------+-----------------+----------------+--------------+
current_date()
| Описание |
Возвращает текущую дату в виде значения типа |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
SELECT
current_date() AS cur_date;
+------------+
| cur_date |
+------------+
| 2025-03-02 |
+------------+
current_localtimestamp()
| Описание |
Возвращает текущее время и дату в виде значения типа |
| Использование |
|
Посмотреть пример
SELECT
current_localtimestamp() AS now;
+----------------------------+
| now |
+----------------------------+
| 2025-03-02 12:38:05.014000 |
+----------------------------+
current_time()
| Описание |
Возвращает текущее время в виде значения типа |
| Использование |
|
| Псевдонимы |
|
Посмотреть примеры
SELECT
current_time AS cur_time_1,
get_current_time() AS cur_time_2;
+-----------------+-----------------+
| cur_time_1 | cur_time_2 |
+-----------------+-----------------+
| 10:33:24.016000 | 10:33:24.016000 |
+-----------------+-----------------+
dayname()
| Описание |
Возвращает английское название дня недели для даты. |
| Использование |
|
Посмотреть примеры
SELECT
dayname(DATE '2024-02-29') AS result_1,
dayname(TIMESTAMP '2024-02-29 00:00:00') AS result_2,
dayname(current_localtimestamp()) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| Thursday | Thursday | Monday |
+----------+----------+----------+
datepart()
| Описание |
Возвращает указанную часть от значения даты или времени в виде значения типа |
| Использование |
|
| Псевдонимы |
|
Аргументами могут быть значения типов: TIME, DATE, TIMESTAMP или TIMESTAMPTZ.
Части могут быть указаны с помощью следующих литералов
-
century— век -
day— день -
decade— десятилетие -
hour— час -
microseconds— микросекунды -
millennium— тысячелетие -
milliseconds— миллисекунды -
minute— минута -
month— месяц -
quarter— квартал -
second— секунда -
year— год
Посмотреть примеры
SELECT
datepart('milliseconds', TIMESTAMP '2025-02-25 00:00:00.1') AS milliseconds,
datepart('hour', TIME '2025-02-25 00:00:00') AS hour,
datepart('millennium', DATE '2025-02-25') AS millennium;
+--------------+------+------------+
| milliseconds | hour | millennium |
+--------------+------+------------+
| 100 | 0 | 3 |
+--------------+------+------------+
date_diff()
| Описание |
Возвращает количество единиц времени между двумя моментами времени в виде значения типа |
| Использование |
|
| Псевдонимы |
|
Аргументами могут быть значения типов: TIME, DATE, TIMESTAMP или TIMESTAMPTZ.
Единицы могут быть указаны с помощью следующих литералов
-
century— век -
day— день -
decade— десятилетие -
hour— час -
microseconds— микросекунды -
millennium— тысячелетие -
milliseconds— миллисекунды -
minute— минута -
month— месяц -
quarter— квартал -
second— секунда -
year— год
Посмотреть примеры
SELECT
date_diff('second', TIME '01:02:03', TIME '03:02:01') AS diff_in_seconds,
date_diff('minute', TIME '01:02:03', TIME '03:02:01') AS diff_in_minutes,
date_diff('hour', TIME '01:02:03', TIME '03:02:01') AS diff_in_hours,
date_diff('day', TIMESTAMP '2025-02-25 01:02:03', TIMESTAMP '2025-02-26 03:02:01') AS diff_in_days_1,
date_diff('day', TIMESTAMP '2025-02-26 01:02:03', TIMESTAMP '2025-02-25 03:02:01') AS diff_in_days_2,
date_diff('day', DATE '2024-02-27', DATE '2025-02-27') AS diff_in_days_3,
date_diff('year', DATE '0753-04-21 (BC)', now()) AS SPQR;
+-----------------+-----------------+---------------+----------------+----------------+----------------+------+
| diff_in_seconds | diff_in_minutes | diff_in_hours | diff_in_days_1 | diff_in_days_2 | diff_in_days_3 | SPQR |
+-----------------+-----------------+---------------+----------------+----------------+----------------+------+
| 7198 | 120 | 2 | 1 | -1 | 366 | 2778 |
+-----------------+-----------------+---------------+----------------+----------------+----------------+------+
date_trunc()
| Описание |
Сокращает момент времени до указанной точности. |
| Использование |
|
Сокращает момент времени TIMESTAMP до указанной единицы точности и возвращает начальный момент времени для данной единицы в виде значения типа TIMESTAMP или DATE.
Некоторые примеры использования описаны в этом сценарии.
Единицы могут быть указаны с помощью следующих литералов
-
century— век -
day— день -
decade— десятилетие -
hour— час -
microseconds— микросекунды -
millennium— тысячелетие -
milliseconds— миллисекунды -
minute— минута -
month— месяц -
quarter— квартал -
second— секунда -
year— год
Посмотреть примеры
SELECT
date_trunc('minute', TIMESTAMP '2025-02-25 01:02:03') AS minute,
date_trunc('hour', TIMESTAMP '2025-02-25 01:02:03') AS hour,
date_trunc('day', TIMESTAMP '2025-02-25 01:02:03') AS day,
date_trunc('month', TIMESTAMP '2025-02-25 01:02:03') AS month,
date_trunc('quarter', TIMESTAMP '2025-02-25 01:02:03') AS quarter,
date_trunc('year', TIMESTAMP '2025-02-25 01:02:03') AS year;
+---------------------+---------------------+------------+------------+------------+------------+
| minute | hour | day | month | quarter | year |
+---------------------+---------------------+------------+------------+------------+------------+
| 2025-02-25 01:02:00 | 2025-02-25 01:00:00 | 2025-02-25 | 2025-02-01 | 2025-01-01 | 2025-01-01 |
+---------------------+---------------------+------------+------------+------------+------------+
dayofmonth()
| Описание |
Возвращает число месяца по заданной дате. |
| Использование |
|
| Псевдонимы |
|
Возвращает число месяца (номер дня в месяце начиная с 1) по заданной дате.
Посмотреть примеры
SELECT
dayofmonth(DATE '2024-02-29') AS result_1,
dayofmonth(now()) AS result_2,
dayofmonth(to_timestamp(0)) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 29 | 21 | 1 |
+----------+----------+----------+
dayofweek()
| Описание |
Возвращает номер дня недели для даты начиная с воскресенья. |
| Использование |
|
| Псевдонимы |
|
Нумерация дней начинается с 0: Воскресенье = 0, Суббота = 6.
Для нумерации по стандарту ISO (начиная с понедельника и с 1) используйте isodow.
|
Посмотреть примеры
SELECT
dayofweek(DATE '2024-02-29') AS result_1,
dayofweek(TIMESTAMP '2024-02-29 00:00:00') AS result_2,
dayofweek(current_localtimestamp()) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 4 | 4 | 1 |
+----------+----------+----------+
dayofyear()
| Описание |
Возвращает номер дня в году для даты. |
| Использование |
|
Нумерация элементов начинается с 1.
|
Посмотреть примеры
SELECT
dayofyear(DATE '2024-02-29') AS result_1,
dayofyear(DATE '2024-12-31') AS result_2,
dayofyear(DATE '2025-12-31') AS result_3,
dayofyear(TIMESTAMP '2024-01-01 00:00:00') AS result_4,
dayofyear(current_localtimestamp()) AS result_5;
+----------+----------+----------+----------+----------+
| result_1 | result_2 | result_3 | result_4 | result_5 |
+----------+----------+----------+----------+----------+
| 60 | 366 | 365 | 1 | 61 |
+----------+----------+----------+----------+----------+
epoch()
| Описание |
Вычисляет количество секунд с начала эпохи по заданному моменту времени. |
| Использование |
|
Началом эпохи считается 1970-01-01.
Обратная функция: to_timestamp()
|
Посмотреть примеры
SELECT
epoch(now()) AS result_1,
epoch(TIMESTAMP '1970-01-01') AS result_2,
epoch(TIMESTAMPTZ '2001-09-09T05:46:40+04:00') AS result_3;
+-------------------+----------+------------+
| result_1 | result_2 | result_3 |
+-------------------+----------+------------+
| 1779358302.018493 | 0 | 1000000000 |
+-------------------+----------+------------+
era()
| Описание |
Возвращает номер эры по заданной дате. |
| Использование |
|
Возвращает номер эры (0 — до нашей эры; 1 — наша эра) по заданной дате.
Посмотреть примеры
SELECT
era(now()) AS result_1,
era(DATE '0753-04-21 (BC)') AS SPQR;
+----------+------+
| result_1 | SPQR |
+----------+------+
| 1 | 0 |
+----------+------+
greatest()
| Описание |
Возвращает наибольший аргумент из указанных. |
| Использование |
|
-
При использовании с числами возвращает наибольшее число.
-
При использовании с текстовыми строками — возвращает последнюю из строк по алфавитному порядку. При этом верхний регистр предшествует нижнему.
-
При использовании с типами для даты и времени — возвращает самый поздний объект.
Посмотреть примеры
SELECT
greatest(1, 2, 3, 4, 4) AS result_1,
greatest(1, -1) AS result_2,
greatest(0) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 4 | 1 | 0 |
+----------+----------+----------+
SELECT
greatest('a', 'z', 'A', 'Z') AS result_1,
greatest('Tengri', 'TNGRi') AS result_2;
+----------+----------+
| result_1 | result_2 |
+----------+----------+
| z | Tengri |
+----------+----------+
SELECT
greatest(DATE '2024-02-29', TIMESTAMP '2024-02-29 00:00:01') AS result_1,
greatest(DATE '2024-02-29', DATE '2029-02-24') AS result_2,
greatest(DATE '2024-02-29', now()) AS result_3;
+---------------------+------------+----------------------------------+
| result_1 | result_2 | result_3 |
+---------------------+------------+----------------------------------+
| 2024-02-29T00:00:01 | 2029-02-24 | 2026-05-06T13:05:46.173330+03:00 |
+---------------------+------------+----------------------------------+
isodow()
| Описание |
Возвращает номер дня недели для даты начиная с понедельника. |
| Использование |
|
Нумерация дней начинается с 1: Понедельник = 1, Воскресенье = 7.
Посмотреть примеры
SELECT
isodow(DATE '2024-02-29') AS result_1,
isodow(TIMESTAMP '2024-02-29 00:00:00') AS result_2,
isodow(current_localtimestamp()) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 4 | 4 | 1 |
+----------+----------+----------+
isoyear()
| Описание |
Возвращает номер года для даты по стандарту ISO. |
| Использование |
|
Возвращает номер года для даты по стандарту ISO.
Год начинается с недели, включающей 4 января.
Посмотреть примеры
SELECT
isoyear(DATE '2022-01-02') AS result_1,
isoyear(DATE '2022-01-03') AS result_2,
isoyear(now()) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 2021 | 2022 | 2026 |
+----------+----------+----------+
julian()
| Описание |
Возвращает юлианскую дату по заданной дате |
| Использование |
|
Возвращает юлианскую дату — количество дней между заданной датой и началом юлианской эпохи.
Посмотреть примеры
SELECT
julian(TIMESTAMP '2025-01-01 12:00:00+00') AS result_1,
julian(TIMESTAMP '2025-01-01 24:00:00+00') AS result_2,
julian(now()) AS result_3;
+-----------+----------+-------------------+
| result_1 | result_2 | result_3 |
+-----------+----------+-------------------+
| 2460677.5 | 2460678 | 2461182.627505683 |
+-----------+----------+-------------------+
least()
| Описание |
Возвращает наименьший аргумент из указанных. |
| Использование |
|
-
При использовании с числами возвращает наименьшее число.
-
При использовании с текстовыми строками — возвращает первую из строк по алфавитному порядку. При этом верхний регистр предшествует нижнему.
-
При использовании с типами для даты и времени — возвращает самый ранний объект.
Посмотреть примеры
SELECT
least(1, 1, 2, 3, 4) AS result_1,
least(1, -1) AS result_2,
least(0) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 1 | -1 | 0 |
+----------+----------+----------+
SELECT
least(DATE '2024-02-29', TIMESTAMP '2024-02-29 00:00:01') AS result_1,
least(DATE '2024-02-29', DATE '2029-02-24') AS result_2,
least(DATE '2024-02-29', now()) AS result_3;
+---------------------+------------+---------------------------+
| result_1 | result_2 | result_3 |
+---------------------+------------+---------------------------+
| 2024-02-29T00:00:00 | 2024-02-29 | 2024-02-29T00:00:00+03:00 |
+---------------------+------------+---------------------------+
SELECT
least('a', 'z', 'A', 'Z') AS result_1,
least('Tengri', 'TNGRi') AS result_2;
+----------+----------+
| result_1 | result_2 |
+----------+----------+
| A | TNGRi |
+----------+----------+
monthname()
| Описание |
Возвращает английское название месяца для даты. |
| Использование |
|
Посмотреть примеры
SELECT
monthname(DATE '2024-02-29') AS result_1,
monthname(TIMESTAMP '2024-02-29 00:00:00') AS result_2,
monthname(current_localtimestamp()) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| February | February | March |
+----------+----------+----------+
now()
| Описание |
Возвращает текущее время в виде значения типа |
| Использование |
|
Посмотреть пример
SELECT
now() AS cur_time;
+----------------------------------+
| cur_time |
+----------------------------------+
| 2025-08-26 13:38:58.461000+00:00 |
+----------------------------------+
strptime()
| Описание |
Конвертирует текст в момент времени по указанному формату. |
| Использование |
|
Конвертирует текст в момент времени TIMESTAMP по указанному формату. В случае невозможности конвертации выдает ошибку.
Некоторые примеры использования описаны в этом сценарии.
Формат может быть указан с помощью следующих выражений
| Выражение | Описание | Пример |
|---|---|---|
|
Сокращенное название дня недели. |
Sun, Mon, … |
|
Полное название дня недели. |
Sunday, Monday, … |
|
Сокращенное название месяца. |
Jan, Feb, …, Dec |
|
Полное название месяца. |
January, February, … |
|
Представление даты и времени в формате ISO |
1992-03-02 10:30:20 |
|
День месяца в виде десятичного числа с нулями в начале. |
01, 02, …, 31 |
|
День месяца в виде десятичного числа. |
1, 2, …, 30 |
|
Микросекунда в виде десятичного числа с нулями в начале. |
000000 - 999999 |
|
Миллисекунда в виде десятичного числа с нулями в начале. |
000 - 999 |
|
Год по стандарту ISO 8601 с указанием века, в котором находится большая часть недели по стандарту ISO (см. |
0001, 0002, …, 2013, 2014, …, 9998, 9999 |
|
Час (24-часовой формат) в виде десятичного числа с нулями в начале. |
00, 01, …, 23 |
|
Час (24-часовой формат) в виде десятичного числа. |
0, 1, …, 23 |
|
Час (12-часовой формат) в виде десятичного числа с нулями в начале. |
01, 02, …, 12 |
|
Час (12-часовой формат) в виде десятичного числа. |
1, 2, … 12 |
|
День года в виде десятичного числа с нулями в начале. |
001, 002, …, 366 |
|
День года в виде десятичного числа. |
1, 2, …, 366 |
|
Месяц в виде десятичного числа с нулями в начале. |
01, 02, …, 12 |
|
Месяц в виде десятичного числа. |
1, 2, …, 12 |
|
Минута в виде десятичного числа с нулями в начале. |
00, 01, …, 59 |
|
Минута в виде десятичного числа. |
0, 1, …, 59 |
|
Наносекунда в виде десятичного числа с нулями в начале. |
000000000 - 999999999 |
|
AM или PM в соответствии с локалью. |
AM, PM |
|
Секунды в виде десятичного числа с нулями в начале |
00, 01, …, 59 |
|
Секунды в виде десятичного числа. |
0_, 1, …, 59_ |
|
День недели по стандарту ISO 8601 в виде десятичного числа, где 1 — понедельник. |
1, 2, …, 7 |
|
Номер недели в году. Неделя 01 начинается в первое воскресенье года, поэтому может быть неделя 00. Обратите внимание, что это не соответствует стандарту даты недели в ISO-8601. |
00, 01, …, 53 |
|
Неделя ISO 8601 в виде десятичного числа, где понедельник является первым днем недели. Неделя 01 — это неделя, содержащая 4 января. Обратите внимание, что |
01, …, 53 |
|
День недели в виде десятичного числа. |
0, 1, …, 6 |
|
Номер недели в году. Неделя 01 начинается в первый понедельник года, поэтому может быть неделя 00. Обратите внимание, что это не соответствует стандарту даты недели в ISO-8601. |
00, 01, …, 53 |
|
Представление даты в формате ISO |
1992-03-02 |
|
Представление времени в формате ISO |
10:30:20 |
|
Год без века в виде десятичного числа с нулями в начале. |
00, 01, …, 99 |
|
Год без века в виде десятичного числа. |
0, 1, …, 99 |
|
Год с указанием века в виде десятичного числа. |
2013, 2019 и т. д. |
|
Смещение времени от UTC в формате ±HH:MM, ±HHMM или ±HH. |
-0700 |
|
Название часового пояса. |
Europe/Amsterdam |
|
Буквальный символ |
% |
Посмотреть примеры
SELECT
strptime('Feb 25, 2025, 01:02:03 AM', '%b %d, %Y, %H:%M:%S %p') AS timestamp_1,
strptime('2025-02-25, 01:02:03', '%x, %X') AS timestamp_2,
strptime('01:02, 01.02.99', '%H:%M, %d.%m.%y') AS timestamp_3,
strptime('01:02%PM--01.02.99', '%H:%M%%%p--%d.%m.%y') AS timestamp_4,
strptime('1:1, 1.1.1', '%-H:%-M, %-d.%-m.%-y') AS timestamp_5,
strptime('1', '%Y') AS timestamp_6;
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| timestamp_1 | timestamp_2 | timestamp_3 | timestamp_4 | timestamp_5 | timestamp_6 |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
| 2025-02-25 01:02:03 | 2025-02-25 01:02:03 | 1999-02-01 01:02:00 | 1999-02-01 13:02:00 | 2001-01-01 01:01:00 | 0001-01-01 00:00:00 |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
timezone_hour()
| Описание |
Возвращает сдвиг часового пояса заданного момента времени от 0. |
| Использование |
|
Возвращает сдвиг часового пояса заданного момента времени от 0 (UTC), выраженный в часах.
Посмотреть примеры
SELECT
now(),
timezone_hour(now()) AS result;
+----------------------------------+--------+
| now | result |
+----------------------------------+--------+
| 2026-05-21T14:06:26.738950+03:00 | 3 |
+----------------------------------+--------+
to_timestamp()
| Описание |
Преобразует секунды с начала эпохи в момент времени. |
| Использование |
|
Преобразует секунды с начала эпохи в момент времени с указанием часового пояса.
Началом эпохи считается 1970-01-01.
Обратная функция: epoch()
|
Посмотреть примеры
SELECT
to_timestamp(1779357588.000001) AS result_1,
to_timestamp(1767214800) AS result_2,
to_timestamp(1) AS result_3;
+----------------------------------+---------------------------+---------------------------+
| result_1 | result_2 | result_3 |
+----------------------------------+---------------------------+---------------------------+
| 2026-05-21T12:59:48.000001+03:00 | 2026-01-01T00:00:00+03:00 | 1970-01-01T03:00:01+03:00 |
+----------------------------------+---------------------------+---------------------------+
weekofyear()
| Описание |
Возвращает номер недели в году по стандарту ISO. |
| Использование |
|
Возвращает номер недели в году по стандарту ISO.
Посмотреть примеры
SELECT
weekofyear(DATE '2026-01-01') AS result_1,
weekofyear(DATE '2026-01-14') AS result_2,
weekofyear(now()) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 1 | 3 | 21 |
+----------+----------+----------+
yearweek()
| Описание |
Возвращает год и номер недели в году по стандарту ISO в виде числа. |
| Использование |
|
Возвращает год и двузначный вариант номера недели в году по стандарту ISO в виде одного числа.
Посмотреть примеры
SELECT
yearweek(DATE '2026-01-01') AS result_1,
yearweek(DATE '2026-01-14') AS result_2,
yearweek(now()) AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 202601 | 202603 | 202621 |
+----------+----------+----------+
Оператор +
| Описание |
Прибавляет правый аргумент к левому. |
| Использование |
|
Если используется с типами для для даты и времени, то прибавляет интервал к значению времени. Возвращает значение типа TIME.
См. также add().
Посмотреть примеры
SELECT
3 + 2 AS result_1,
3 + 2 + -1 AS result_2,
1.1 + 1.9 AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 5 | 4 | 3.0 |
+----------+----------+----------+
SELECT
TIME '12:11:10' + INTERVAL 3 hours AS result_time_1,
INTERVAL '12:11:10' + TIME '1:1:1' AS result_time_2;
+---------------+---------------+
| result_time_1 | result_time_2 |
+---------------+---------------+
| 15:11:10 | 13:12:11 |
+---------------+---------------+
Оператор -
| Описание |
Вычитает правый аргумент из левого. |
| Использование |
|
Если используется с типами для для даты и времени, то вычитает интервал из значения времени. Возвращает значение типа TIME.
См. также subtract().
Посмотреть примеры
SELECT
3 - 2 AS result_1,
3 - 2 - +1 AS result_2,
1.2 - 0.2 AS result_3;
+----------+----------+----------+
| result_1 | result_2 | result_3 |
+----------+----------+----------+
| 1 | 0 | 1.0 |
+----------+----------+----------+
SELECT
TIME '12:11:10' - INTERVAL 3 HOUR AS result_time_1,
TIME '12:11:10' - INTERVAL 3 HOUR - INTERVAL 1 HOUR AS result_time_2;
+---------------+---------------+
| result_time_1 | result_time_2 |
+---------------+---------------+
| 09:11:10 | 08:11:10 |
+---------------+---------------+