Значения даты и времени принимаются практически в любом разумном формате, включая 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 |