Функции для даты и времени
Функции для даты и времени — это функции для работы с данными типов DATE, TIME, TIMESTAMP и TIMESTAMPTZ.
current_time()
| Описание |
Возвращает текущее время в виде значения типа |
| Использование |
|
| Псевдонимы |
|
Посмотреть пример
SELECT
current_time AS cur_time_1,
current_time() AS cur_time_2,
get_current_time() AS cur_time_3;
+-----------------+-----------------+-----------------+
| cur_time_1 | cur_time_2 | cur_time_3 |
+-----------------+-----------------+-----------------+
| 10:33:24.016000 | 10:33:24.016000 | 10:33:24.016000 |
+-----------------+-----------------+-----------------+
now()
| Описание |
Возвращает текущее время в виде значения типа |
| Использование |
|
Посмотреть пример
SELECT
now() AS cur_time;
+----------------------------------+
| cur_time |
+----------------------------------+
| 2025-08-26 13:38:58.461000+00:00 |
+----------------------------------+
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,
date_diff('day', TIMESTAMP '2025-02-26 01:02:03', TIMESTAMP '2025-02-25 03:02:01') AS diff_in_days,
date_diff('day', DATE '2024-02-27', DATE '2025-02-27') AS diff_in_days;
+-----------------+-----------------+---------------+--------------+--------------+--------------+
| diff_in_seconds | diff_in_minutes | diff_in_hours | diff_in_days | diff_in_days | diff_in_days |
+-----------------+-----------------+---------------+--------------+--------------+--------------+
| 7198 | 120 | 2 | 1 | -1 | 366 |
+-----------------+-----------------+---------------+--------------+--------------+--------------+
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 |
+---------------------+---------------------+------------+------------+------------+------------+
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 |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+
Оператор +
| Описание |
Прибавляет правый аргумент к левому. |
| Использование |
|
Если используется с типами для для даты и времени, то прибавляет интервал к значению времени. Возвращает значение типа 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 |
+---------------+---------------+