21.7. Функции для работы с типами данных времени #
-
time_bucket(bucket_width INTERVAL, timestamp_col TIMESTAMP, origin TIMESTAMP) returns#TIMESTAMP Группирует временные метки в интервалы для анализа временных рядов. Эта функция совместима с функцией
time_bucketв TimescaleDB, что упрощает миграцию и обеспечивает совместимость.Пример 21.22.
-- Группировать события по часам SELECT time_bucket(INTERVAL '1 hour', created_at) as hour_bucket, COUNT(*) FROM events GROUP BY hour_bucket ORDER BY hour_bucket; -- Группировать с интервалом 15 минут SELECT time_bucket(INTERVAL '15 minutes', timestamp_col), AVG(value) FROM sensor_data WHERE timestamp_col >= '2024-01-01' GROUP BY 1 ORDER BY 1;
Обязательные параметры:
Имя
Тип
Описание
bucket_widthintervalИнтервал времени для группировки (например,
'1 hour','15 minutes')timestamp_coltimestampСтолбец с временными метками для группировки
Необязательные параметры:
Имя
Тип
Описание
origintimestampТочка отсчёта для группировки. Интервалы выровнены относительно этой временной метки.
-
strftime (timestamp_expr, format_string) returns#TEXT Форматирует временные метки в виде строк с использованием стандартных кодов форматирования. Эта функция обеспечивает гибкое форматирование временных меток для отображения и экспорта.
Пример 21.23.
-- Форматировать текущую временную метку SELECT strftime(NOW(), '%Y-%m-%d %H:%M:%S') AS formatted_time; -- Форматировать временные метки в разных форматах SELECT order_id, strftime(created_at, '%Y-%m-%d') AS order_date, strftime(created_at, '%H:%M') AS order_time, strftime(created_at, '%A, %B %d, %Y') AS readable_date FROM orders; -- Использовать для секционирования экспорта в файлы COPY (SELECT * FROM events WHERE event_date = '2024-01-01') TO 's3://bucket/events/' || strftime('2024-01-01'::timestamp, '%Y/%m/%d') || '/events.parquet';Основные коды форматирования:
%Y: четырёхзначный год (2024).%m: месяц в числовом формате (01-12).%d: день месяца (01-31).%H: час (00-23).%M: минута (00-59).%S: секунда (00-59).%A: полное название дня недели (понедельник).%B: полное название месяца (январь).
Необязательные параметры:
Имя
Тип
Описание
timestamp_exprtimestampЗначение временной метки для форматирования
format_stringtextСтрока с кодами форматирования
-
strptime(string_expr, format_string) returns#TIMESTAMP Преобразует строки во временные метки с помощью кодов форматирования.
Пример 21.24.
-- Разобрать строки с датами SELECT strptime('2024-01-15 14:30:00', '%Y-%m-%d %H:%M:%S') AS parsed_timestamp; -- Разобрать разные форматы SELECT strptime('Jan 15, 2024', '%b %d, %Y') AS date1, strptime('15/01/2024', '%d/%m/%Y') AS date2, strptime('2024-01-15T14:30:00Z', '%Y-%m-%dT%H:%M:%SZ') AS iso_date; -- Разобрать временные метки в журнале SELECT log_id, strptime(timestamp_string, '%Y-%m-%d %H:%M:%S') AS parsed_time, message FROM raw_logs;Обязательные параметры:
Имя
Тип
Описание
string_exprtextСтрока для преобразования во временную метку
format_stringtextСтрока форматирования с описанием формата входной строки
-
epoch(timestamp_expr) returns BIGINT# Преобразует временные метки в секунды эпохи Unix (количество секунд, прошедших с 1970-01-01 00:00:00 UTC).
Пример 21.25.
-- Получить текущее время эпохи Unix SELECT epoch(NOW()) AS current_epoch; -- Преобразовать временные метки для использования в API SELECT event_id, epoch(event_timestamp) AS epoch_seconds FROM events; -- Отфильтровать, используя время эпохи Unix SELECT * FROM events WHERE epoch(created_at) > 1640995200; -- After 2022-01-01Обязательные параметры:
Имя
Тип
Описание
map_colduckdb.mapАссоциативный массив, из которого необходимо извлечь параметры
keyduckdb.unresolved_typeКлюч, который необходимо найти в ассоциативном массиве
-
epoch_ms(timestamp_expr) returns#BIGINT Преобразует временные метки в миллисекунды эпохи Unix.
Пример 21.26.
-- Высокоточная временная метка для JavaScript SELECT epoch_ms(NOW()) AS timestamp_ms; -- Для данных временных рядов SELECT sensor_id, epoch_ms(reading_time) AS timestamp_ms, value FROM sensor_readings;Обязательные параметры:
Имя
Тип
Описание
timestamp_exprtimestampВременная метка, которую необходимо преобразовать в миллисекунды эпохи Unix
-
epoch_ms(milliseconds) returns#TIMESTAMP Преобразует миллисекунды эпохи Unix во временную метку.
Пример 21.27.
-- Преобразовать миллисекунды эпохи Unix во временную метку SELECT epoch_ms(1640995200000) AS timestamp_from_ms; -- 2022-01-01 00:00:00 -- Преобразовать сохранённые миллисекунды обратно во временные метки SELECT event_id, epoch_ms(timestamp_ms) AS event_time FROM events;Обязательные параметры:
Имя
Тип
Описание
millisecondsbigintМиллисекунды, прошедшие с начала эпохи Unix
-
epoch_us(timestamp_expr) returns#BIGINT Преобразовывает временные метки в микросекунды эпохи Unix.
Пример 21.28.
-- Временные метки с точностью до микросекунды SELECT epoch_us(NOW()) AS timestamp_us;
Обязательные параметры:
Имя
Тип
Описание
timestamp_exprtimestampВременная метка, которую необходимо преобразовать в микросекунды эпохи Unix
-
epoch_ns(timestamp_expr) returns#BIGINT Преобразовывает временные метки в наносекунды эпохи Unix.
Пример 21.29.
-- Временные метки с точностью до наносекунды SELECT epoch_ns(NOW()) AS timestamp_ns;
Обязательные параметры:
Имя
Тип
Описание
timestamp_exprtimestampВременная метка, которую необходимо преобразовать в наносекунды эпохи Unix
-
make_timestamp(microseconds) returns#TIMESTAMP Создаёт временную метку из микросекунд, прошедших с начала эпохи Unix (1970-01-01 00:00:00 UTC).
Пример 21.30.
-- Создать временную метку из текущего времени в микросекундах эпохи Unix SELECT make_timestamp(epoch_us(NOW())) AS reconstructed_timestamp; -- Создать определённую временную метку SELECT make_timestamp(1640995200000000) AS new_years_2022; -- 2022-01-01 00:00:00
Обязательные параметры:
Имя
Тип
Описание
microsecondsBIGINTМикросекунды, прошедшие с начала эпохи Unix
-
make_timestamptz(microseconds) returns#TIMESTAMPTZ Создаёт временную метку с часовым поясом из микросекунд, прошедших с начала эпохи Unix.
Пример 21.31.
-- Создать timestamptz из текущих микросекунд эпохи SELECT make_timestamptz(epoch_us(NOW())) AS reconstructed_timestamptz; -- Создать конкретную timestamptz SELECT make_timestamptz(1640995200000000) AS new_years_2022_tz;
Обязательные параметры:
Имя
Тип
Описание
microsecondsbigintМикросекунды, прошедшие с начала эпохи Unix