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

Формат по умолчанию

По умолчанию вывод даты и времени осуществляется согласно формату ISO 8601

SELECT current_timestamp
# current_timestamp
1 2022-12-13 10:33:36.384508+07
SELECT current_date
# current_date
1 2022-12-13
SELECT current_time
# current_time
1 10:33:36.384508+07

Форматирование с помощью to_char

Отформатировать дату и время в произвольном формате позволяет функция to_char. Она принимает на вход два аргумента: значение для форматирования и формат.

SELECT to_char (current_date, 'DD.MM.YYYY')
# to_char
1 13.12.2022

В строке формата можно использовать коды:

Код Описание
HH час дня (01–12)
HH12 час дня (01–12)
HH24 час дня (00–23)
MI минута (00–59)
SS секунда (00–59)
MS миллисекунда (000–999)
US микросекунда (000000–999999)
FF1 десятая доля секунды (0–9)
FF2 сотая доля секунды (00–99)
FF3 миллисекунда (000–999)
FF4 десятитысячная доля секунды (0000–9999)
FF5 стотысячная доля секунды (00000–99999)
FF6 микросекунда (000000–999999)
SSSS, SSSSS секунды после полуночи (0–86399)
AM, am, PM или pm обозначение времени до/после полудня (без точек)
A.M., a.m., P.M. или p.m. обозначение времени до/после полудня (с точками)
Y,YYY год (4 или более цифр) с разделителем
YYYY год (4 или более цифр)
YYY последние 3 цифры года
YY последние 2 цифры года
Y последняя цифра года
IYYY недельный год по ISO 8601 (4 или более цифр)
IYY последние 3 цифры недельного года по ISO 8601
IY последние 2 цифры недельного года по ISO 8601
I последняя цифра недельного года по ISO 8601
BC, bc, AD или ad обозначение эры (без точек)
B.C., b.c., A.D. или a.d. обозначение эры (с точками)
MONTH полное название месяца в верхнем регистре (дополненное пробелами до 9 символов)
Month полное название месяца с большой буквы (дополненное пробелами до 9 символов)
month полное название месяца в нижнем регистре (дополненное пробелами до 9 символов)
MON сокращённое название месяца в верхнем регистре (3 буквы в английском; в других языках длина может меняться)
Mon сокращённое название месяца с большой буквы (3 буквы в английском; в других языках длина может меняться)
mon сокращённое название месяца в нижнем регистре (3 буквы в английском; в других языках длина может меняться)
MM номер месяца (01–12)
DAY полное название дня недели в верхнем регистре (дополненное пробелами до 9 символов)
Day полное название дня недели с большой буквы (дополненное пробелами до 9 символов)
day полное название дня недели в нижнем регистре (дополненное пробелами до 9 символов)
DY сокращённое название дня недели в верхнем регистре (3 буквы в английском; в других языках может меняться)
Dy сокращённое название дня недели с большой буквы (3 буквы в английском; в других языках длина может меняться)
dy сокращённое название дня недели в нижнем регистре (3 буквы в английском; в других языках длина может меняться)
DDD номер дня в году (001–366)
IDDD номер дня в году по ISO 8601 (001–371; первый день года — понедельник первой недели по ISO)
DD день месяца (01–31)
D номер дня недели, считая с воскресенья (1) до субботы (7)
ID номер дня недели по ISO 8601, считая с понедельника (1) до воскресенья (7)
W неделя месяца (1–5) (первая неделя начинается в первый день месяца)
WW номер недели в году (1–53) (первая неделя начинается в первый день года)
IW номер недели в году по ISO 8601 (01–53; первый четверг года относится к неделе 1)
CC век (2 цифры) (двадцать первый век начался 2001-01-01)
J юлианская дата (целое число дней от 24 ноября 4714 г. до н. э. 00:00 по местному времени; см. Раздел B.7)
Q квартал
RM номер месяца римскими цифрами в верхнем регистре (I–XII; I=январь)
rm номер месяца римскими цифрами в нижнем регистре (i–xii; i=январь)
TZ сокращённое название часового пояса в верхнем регистре (поддерживается только в to_char)
tz сокращённое название часового пояса в нижнем регистре (поддерживается только в to_char)
TZH часы часового пояса
TZM минуты часового пояса
OF смещение часового пояса от UTC (поддерживается только в to_char)

Несколько примеров

SELECT p.purchase_id,
       p.purchase_date,
       to_char (p.purchase_date, 'DD.MM.YYYY в HH24:MI') AS "DD.MM.YYYY в HH24:MI",
       to_char (p.purchase_date, 'D Month YYYY') as "D Month YYYY",
       to_char (p.purchase_date, 'Dth Month YYYY') as "Dth Month YYYY"
  FROM purchase p
 ORDER BY p.purchase_date
# purchase_id purchase_date DD.MM.YYYY в HH24:MI D Month YYYY Dth Month YYYY
1 10 2019-03-01 19:15:43.206+07 01.03.2019 в 19:15 6 March 2019 6th March 2019
2 3 2019-03-05 16:12:33.206+07 05.03.2019 в 16:12 3 March 2019 3rd March 2019
3 9 2019-03-06 17:55:43.206+07 06.03.2019 в 17:55 4 March 2019 4th March 2019
4 4 2019-03-06 20:12:33.206+07 06.03.2019 в 20:12 4 March 2019 4th March 2019
5 8 2019-03-07 19:23:43.206+07 07.03.2019 в 19:23 5 March 2019 5th March 2019
6 5 2019-03-07 21:22:43.206+07 07.03.2019 в 21:22 5 March 2019 5th March 2019
7 6 2019-03-09 19:25:43.206+07 09.03.2019 в 19:25 7 March 2019 7th March 2019
8 2 2019-03-10 17:12:34.206+07 10.03.2019 в 17:12 1 March 2019 1st March 2019
9 11 2019-03-10 23:35:43.206+07 10.03.2019 в 23:35 1 March 2019 1st March 2019
10 1 2019-03-11 17:15:02.206+07 11.03.2019 в 17:15 2 March 2019 2nd March 2019
11 7 2019-03-13 22:10:43.206+07 13.03.2019 в 22:10 4 March 2019 4th March 2019
SELECT to_char (sd.start_year + make_interval (months => shift), 'Month YYYY') as full_name,
       to_char (sd.start_year + make_interval (months => shift), 'FMMonth YYYY') as fm_name
  FROM (SELECT date_trunc ('year', current_date) as start_year) sd,
       generate_series(0, 11) shift
 ORDER BY shift
# full_name fm_name
1 January 2022 January 2022
2 February 2022 February 2022
3 March 2022 March 2022
4 April 2022 April 2022
5 May 2022 May 2022
6 June 2022 June 2022
7 July 2022 July 2022
8 August 2022 August 2022
9 September 2022 September 2022
10 October 2022 October 2022
11 November 2022 November 2022
12 December 2022 December 2022

9.2 Точность хранения времени

9.4 Ввод даты и времени