Spec-Zone.ru › DuckDB

Типы временных меток

Временные метки представляют моменты абсолютного времени, обычно называемые мгновениями. DuckDB представляет мгновения как количество микросекунд (мкс) с момента 1970-01-01 00:00:00+00.

Типы временных меток

Имя Псевдонимы Описание
TIMESTAMP_NS временная метка с точностью до наносекунд (игнорирует часовой пояс)
TIMESTAMP DATETIME временная метка с точностью до микросекунд (игнорирует часовой пояс)
TIMESTAMP_MS временная метка с точностью до миллисекунд (игнорирует часовой пояс)
TIMESTAMP_S временная метка с точностью до секунды (игнорирует часовой пояс)
TIMESTAMPTZ TIMESTAMP WITH TIME ZONE временная метка (использует часовой пояс)

Временная метка определяет комбинацию DATE (год, месяц, день) и TIME (час, минута, секунда, микросекунда). Временные метки можно создавать с использованием ключевого слова TIMESTAMP, где данные должны быть отформатированы в соответствии с форматом ISO 8601 (YYYY-MM-DD hh:mm:ss[.zzzzzz][+-TT[:tt]]). Десятичные знаки, выходящие за рамки заданной точности долей секунды, игнорируются.

Предупреждение. При определении временных меток с помощью литерала TIMESTAMP_NS, десятичные знаки, выходящие за рамки микросекунд, игнорируются. Обратите внимание, что тип TIMESTAMP_NS может хранить наносекунды при создании, например, при загрузке файлов Parquet.

SELECT TIMESTAMP_NS '1992-09-20 11:30:00.123456789';
1992-09-20 11:30:00.123456
SELECT TIMESTAMP '1992-09-20 11:30:00.123456789';
1992-09-20 11:30:00.123456
SELECT DATETIME '1992-09-20 11:30:00.123456789';
1992-09-20 11:30:00.123456
SELECT TIMESTAMP_MS '1992-09-20 11:30:00.123456789';
1992-09-20 11:30:00.123
SELECT TIMESTAMP_S '1992-09-20 11:30:00.123456789';
1992-09-20 11:30:00
SELECT TIMESTAMPTZ '1992-09-20 11:30:00.123456789';
1992-09-20 11:30:00.123456+00
SELECT TIMESTAMP WITH TIME ZONE '1992-09-20 11:30:00.123456789';
1992-09-20 11:30:00.123456+00

Специальные значения

Также существуют три специальных значения дат, которые можно использовать на входе:

Строка ввода Допустимые типы Описание
epoch TIMESTAMP, TIMESTAMPTZ 1970-01-01 00:00:00+00 (нулевое время системы Unix)
infinity TIMESTAMP, TIMESTAMPTZ позже всех других временных меток
-infinity TIMESTAMP, TIMESTAMPTZ раньше всех других временных меток

Значения infinity и -infinity специально представлены внутри системы и будут отображаться без изменений; но epoch — просто сокращение для записи, которое будет преобразовано в значение временной метки при чтении.

SELECT '-infinity'::TIMESTAMP, 'epoch'::TIMESTAMP, 'infinity'::TIMESTAMP;
Отрицательное Эпоха Положительное
-бесконечность 1970-01-01 00:00:00 бесконечность

Функции

См. Функции временных меток.

Часовые пояса

Тип TIMESTAMPTZ может быть разбит на календарные и часовые интервалы с помощью соответствующего расширения. Встроенное расширение ICU реализует все функции разбиения и арифметики, используя функции часовых поясов и календарей International Components for Unicode.

Для установки используемого часового пояса сначала загрузите расширение ICU. Расширение ICU поставляется в комплекте с несколькими клиентами DuckDB (включая Python, R, JDBC и ODBC), поэтому этот шаг можно пропустить в этих случаях. В других случаях вам может потребоваться сначала установить и загрузить расширение ICU.

INSTALL icu;
LOAD icu;

Далее, используйте команду SET TimeZone.

SET TimeZone = 'America/Los_Angeles';

Операции разбиения по времени для TIMESTAMPTZ будут реализованы с использованием указанного часового пояса.

Список доступных часовых поясов можно получить из табличной функции pg_timezone_names():

SELECT
    name,
    abbrev,
    utc_offset
FROM pg_timezone_names()
ORDER BY
    name;

Вы также можете найти справочную таблицу доступных часовых поясов.

Календари

Расширение ICU также поддерживает календари, отличные от григорианского, с помощью команды SET Calendar. Обратите внимание, что шаги INSTALL и LOAD необходимы только в том случае, если клиент DuckDB не включает расширение ICU.

INSTALL icu;
LOAD icu;
SET Calendar = 'japanese';

Операции разбиения по времени для TIMESTAMPTZ будут затем реализованы с использованием заданного календаря. В этом примере часть era теперь будет отображать номер японской императорской эры.

Список доступных календарей можно получить из табличной функции icu_calendar_names():

SELECT name
FROM icu_calendar_names()
ORDER BY 1;

Настройки

Текущее значение настроек TimeZone и Calendar определяется ICU при запуске. Их можно запросить в табличной функции duckdb_settings():

SELECT *
FROM duckdb_settings()
WHERE name = 'TimeZone';
Имя Значение Описание Тип ввода
Часовой пояс Europe/Amsterdam Текущий часовой пояс VARCHAR
SELECT *
FROM duckdb_settings()
WHERE name = 'Calendar';
Имя Значение Описание Тип ввода
Календарь григорианский Текущий календарь VARCHAR

© Copyright 2018–2024 Stichting DuckDB Foundation
Licensed under the MIT License.
https://duckdb.org/docs/sql/data_types/timestamp.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API