Значения даты и времени принимаются практически в любом разумном формате, включая ISO 8601, SQL-совместимый, традиционный формат POSTGRES и другие.

Для ввода значения даты и времени необходимо в запросе указать тип и значение в апострофах:

тип 'значение'

Например:

SELECT date '1991-07-29' AS date_example,
       timestamp '1991-07-29 10:30:00' AS timestamp_example,
       time '10:30:00' AS time_example
# date_example timestamp_example time_example
1 1991-07-29 1991-07-29 10:30:00 10:30:00

Для типов time, timestamp и interval так же можно указать точность в интервале от 0 до 6. Если в определении константы точность не указана, она считается равной точности значения в строке (но не больше 6 цифр).

SELECT timestamp(6) '1991-07-29 10:30:00.123456' AS timestamp_6,
       timestamp(3) '1991-07-29 10:30:00.123456' AS timestamp_3,
       timestamp '1991-07-29 10:30:00.1234' AS timestamp_auto_4,
       timestamp '1991-07-29 10:30:00.12' AS timestamp_auto_2
# timestamp_6 timestamp_3 timestamp_auto_4 timestamp_auto_2
1 1991-07-29 10:30:00.123456 1991-07-29 10:30:00.123 1991-07-29 10:30:00.1234 1991-07-29 10:30:00.12

DateStyle

В некоторых форматах порядок даты, месяца и года во вводимой дате неоднозначен и поэтому поддерживается явное определение формата. Для этого предназначен параметр конфигурации СУБД DateStyle.

Варианты значений DateStyle:

  • MDY - выбирается интерпретация месяц-день-год
  • DMY - соответствует день-месяц-год
  • YMD - год-месяц-день.

Запомнить легко: D - Day, M - Month, Y - Year.

Примеры констант ввода даты с описанием результата в зависимости от настроек DateStyle

Пример Описание
1999-01-08 ISO 8601; 8 января в любом режиме (рекомендуемый формат)
January 8, 1999 воспринимается однозначно в любом режиме datestyle
1/8/1999 8 января в режиме MDY и 1 августа в режиме DMY
1/18/1999 18 января в режиме MDY; недопустимая дата в других режимах
01/02/03 2 января 2003 г. в режиме MDY; 1 февраля 2003 г. в режиме DMY и 3 февраля 2001 г. в режиме YMD
1999-Jan-08 8 января в любом режиме
Jan-08-1999 8 января в любом режиме
08-Jan-1999 8 января в любом режиме
99-Jan-08 8 января в режиме YMD; ошибка в других режимах
08-Jan-99 8 января; ошибка в режиме YMD
Jan-08-99 8 января; ошибка в режиме YMD
19990108 ISO 8601; 8 января 1999 в любом режиме
990108 ISO 8601; 8 января 1999 в любом режиме
1999.008 год и день года
J2451187 юлианский день
January 8, 99 BC 99 до н. э.

Альтернативный способ ввода

Для ввода даты и времени можно также воспользоваться приведением типов через ::.

Наш исходный запрос

SELECT date '1991-07-29' AS date_example,
       timestamp '1991-07-29 10:30:00' AS timestamp_example,
       time '10:30:00' AS time_example

можно переписать вот так:

SELECT '1991-07-29'::date AS date_example,
       '1991-07-29 10:30:00'::timestamp AS timestamp_example,
       '10:30:00'::time AS time_example

Указывать точность также допустимо:

SELECT '1991-07-29 10:30:00.123456'::timestamp(3) AS timestamp_example
# timestamp_example
1 1991-07-29 10:30:00.123

9.3 Форматирование даты и времени

9.5 Ввод даты: to_date