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

Функции для даты и времени — это функции для работы с данными типов DATE, TIME, TIMESTAMP и TIMESTAMPTZ.

current_time()

Описание

Возвращает текущее время в виде значения типа TIME.

Использование

current_time или current_time()

Псевдонимы

get_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()

Описание

Возвращает текущее время в виде значения типа TIMESTAMPTZ

Использование

now()

Посмотреть пример
SELECT
    now() AS cur_time;
+----------------------------------+
| cur_time                         |
+----------------------------------+
| 2025-08-26 13:38:58.461000+00:00 |
+----------------------------------+

datepart()

Описание

Возвращает указанную часть от значения даты или времени в виде значения типа BIGINT.

Использование

datepart('<part>', (TIME | DATE | ...) <date_time>)

Псевдонимы

date_part()

Аргументами могут быть значения типов: 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()

Описание

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

Использование

date_diff('<part>', start, end)

Аргументами могут быть значения типов: 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()

Описание

Сокращает момент времени до указанной точности.

Использование

date_trunc('<part>', <time_stamp>)

Сокращает момент времени 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()

Описание

Конвертирует текст в момент времени по указанному формату.

Использование

strptime(<string>, <format>)

Конвертирует текст в момент времени TIMESTAMP по указанному формату. В случае невозможности конвертации выдает ошибку.

Некоторые примеры использования описаны в этом сценарии.

Формат может быть указан с помощью следующих выражений
Выражение Описание Пример

%a

Сокращенное название дня недели.

Sun, Mon, …

%A

Полное название дня недели.

Sunday, Monday, …

%b

Сокращенное название месяца.

Jan, Feb, …, Dec

%B

Полное название месяца.

January, February, …

%c

Представление даты и времени в формате ISO

1992-03-02 10:30:20

%d

День месяца в виде десятичного числа с нулями в начале.

01, 02, …, 31

%-d

День месяца в виде десятичного числа.

1, 2, …, 30

%f

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

000000 - 999999

%g

Миллисекунда в виде десятичного числа с нулями в начале.

000 - 999

%G

Год по стандарту ISO 8601 с указанием века, в котором находится большая часть недели по стандарту ISO (см. %V).

0001, 0002, …, 2013, 2014, …, 9998, 9999

%H

Час (24-часовой формат) в виде десятичного числа с нулями в начале.

00, 01, …, 23

%-H

Час (24-часовой формат) в виде десятичного числа.

0, 1, …, 23

%I

Час (12-часовой формат) в виде десятичного числа с нулями в начале.

01, 02, …, 12

%-I

Час (12-часовой формат) в виде десятичного числа.

1, 2, … 12

%j

День года в виде десятичного числа с нулями в начале.

001, 002, …, 366

%-j

День года в виде десятичного числа.

1, 2, …, 366

%m

Месяц в виде десятичного числа с нулями в начале.

01, 02, …, 12

%-m

Месяц в виде десятичного числа.

1, 2, …, 12

%M

Минута в виде десятичного числа с нулями в начале.

00, 01, …, 59

%-M

Минута в виде десятичного числа.

0, 1, …, 59

%n

Наносекунда в виде десятичного числа с нулями в начале.

000000000 - 999999999

%p

AM или PM в соответствии с локалью.

AM, PM

%S

Секунды в виде десятичного числа с нулями в начале

00, 01, …, 59

%-S

Секунды в виде десятичного числа.

0_, 1, …, 59_

%u

День недели по стандарту ISO 8601 в виде десятичного числа, где 1 — понедельник.

1, 2, …, 7

%U

Номер недели в году. Неделя 01 начинается в первое воскресенье года, поэтому может быть неделя 00. Обратите внимание, что это не соответствует стандарту даты недели в ISO-8601.

00, 01, …, 53

%V

Неделя ISO 8601 в виде десятичного числа, где понедельник является первым днем недели. Неделя 01 — это неделя, содержащая 4 января. Обратите внимание, что %V несовместим с выражением для года %Y. Вместо этого используйте год ISO %G.

01, …, 53

%w

День недели в виде десятичного числа.

0, 1, …, 6

%W

Номер недели в году. Неделя 01 начинается в первый понедельник года, поэтому может быть неделя 00. Обратите внимание, что это не соответствует стандарту даты недели в ISO-8601.

00, 01, …, 53

%x

Представление даты в формате ISO

1992-03-02

%X

Представление времени в формате ISO

10:30:20

%y

Год без века в виде десятичного числа с нулями в начале.

00, 01, …, 99

%-y

Год без века в виде десятичного числа.

0, 1, …, 99

%Y

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

2013, 2019 и т. д.

%z

Смещение времени от UTC в формате ±HH:MM, ±HHMM или ±HH.

-0700

%Z

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

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 |
+---------------------+---------------------+---------------------+---------------------+---------------------+---------------------+

Оператор +

Описание

Прибавляет правый аргумент к левому.

Использование

<num> + <num> [+ ...] или TIME + INTERVAL [+ ...]

Если используется с типами для для даты и времени, то прибавляет интервал к значению времени. Возвращает значение типа 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      |
+---------------+---------------+

Оператор -

Описание

Вычитает правый аргумент из левого.

Использование

<num> - <num> [- ...] или TIME - INTERVAL [- ...]

Если используется с типами для для даты и времени, то вычитает интервал из значения времени. Возвращает значение типа 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      |
+---------------+---------------+