Личный кабинет
Укажите e-mail, на который будет выслан код восстановления пароля.
На указанный вами адрес e-mail был выслан код подтверждения аккаунта. Введите полученный код для продолжения:
Введите новый пароль два раза:
Функции форматирования в PostgreSQL предоставляют богатый набор инструментов для преобразования самых разных типов данных (дата/время, целое, числа с плавающей и фиксированной точкой) в форматированные строки и обратно. Все они перечислены в Таблице 9.23. Все эти функции следует одному соглашению: в первом аргументе передаётся значение, которое нужно отформатировать, а во втором — шаблон, определяющий формат ввода или вывода.
Таблица 9.23. Функции форматирования
to_char(timestamp, text)
timestamp
text
to_char(current_timestamp, 'HH12:MI:SS')
to_char(interval, text)
interval
to_char(interval '15h 2m 12s', 'HH24:MI:SS')
to_char(int, text)
int
to_char(125, '999')
to_char(double precision, text)
to_char
double precision
to_char(125.8::real, '999D9')
to_char(numeric, text)
numeric
to_char(-125.8, '999D99S')
to_date(text, text)
date
to_date('05 Dec 2000', 'DD Mon YYYY')
to_number(text, text)
to_number('12,454.8-', '99G999D9S')
to_timestamp(text, text)
timestamp with time zone
to_timestamp('05 Dec 2000', 'DD Mon YYYY')
Также имеется функция to_timestamp с одним аргументом; см. Таблицу 9.30.
to_timestamp
Функции to_timestamp и to_date предназначены для работы с входными форматами, которые нельзя преобразовать простым приведением. Для большинства стандартных форматов даты/времени работает простое приведение исходной строки к требуемому типу и использовать его гораздо легче. Так же и функцию to_number нет необходимости использовать для стандартных представлений чисел.
to_date
to_number
Шаблон вывода to_char может содержать ряд кодов, которые распознаются при форматировании и заменяются соответствующими данными. Любой текст, который не является кодом, копируется в результат в неизменном виде. Подобным образом, в строке шаблона ввода (для других функций) коды шаблона определяют, какие значения содержит передаваемая текстовая строка.
Все коды форматирования даты и времени перечислены в Таблице 9.24.
Таблица 9.24. Коды форматирования даты/времени
HH
HH12
HH24
MI
SS
MS
US
SSSS
AM
am
PM
pm
A.M.
a.m.
P.M.
p.m.
Y,YYY
YYYY
YYY
YY
Y
IYYY
IYY
IY
I
BC
bc
AD
ad
B.C.
b.c.
A.D.
a.d.
MONTH
Month
month
MON
Mon
mon
MM
DAY
Day
day
DY
Dy
dy
DDD
IDDD
DD
D
1
7
ID
W
WW
IW
CC
J
Q
RM
rm
TZ
tz
OF
К любым кодам форматирования можно добавить модификаторы, изменяющие их поведение. Например, шаблон форматирования FMMonth включает код Month с модификатором FM. Модификаторы, предназначенные для форматирования даты/времени, перечислены в Таблице 9.25.
FMMonth
FM
Таблица 9.25. Модификаторы кодов для форматирования даты/времени
TH
DDTH
12TH
th
DDth
12th
FX
FX Month DD Day
TM
TMMonth
SP
DDSP
Замечания по использованию форматов даты/времени:
FM подавляет дополняющие пробелы и нули справа, которые в противном случае будут добавлены, чтобы результат имел фиксированную ширину. В PostgreSQL модификатор FM действует только на следующий код, тогда как в Oracle FM её действие распространяется на все последующие коды, пока не будет отключено последующим модификатором FM.
TM не затрагивает замыкающие пробелы. Функции to_timestamp и to_date игнорируют указание TM.
to_timestamp и to_date пропускают повторяющиеся пробелы во входной строке, если только не используется параметр FX. Например, to_timestamp('2000 JUN', 'YYYY MON') будет работать, но to_timestamp('2000 JUN', 'FXYYYY MON') вернёт ошибку, так как to_timestamp в данном случае ожидает только один разделяющий пробел. Приставка FX должна быть первой в шаблоне.
to_timestamp('2000 JUN', 'YYYY MON')
to_timestamp('2000 JUN', 'FXYYYY MON')
Шаблоны для функций to_char могут содержать обычный текст; он будет выведен в неизменном виде. Чтобы вывести текст принудительно, например, если в нём оказываются поддерживаемые коды, его можно заключить в кавычки. Например, в строке '"Hello Year "YYYY', код YYYY будет заменён номером года, а буква Y в слове Year останется неизменной. В функциях to_date, to_number и to_timestamp при обработке подстроки в кавычках просто пропускаются символы входной строки по числу символов в подстроке, например для "XX" будут пропущены два символа.
'"Hello Year "YYYY'
Year
"XX"
Если вы хотите получить в результате кавычки, перед ними нужно добавить обратную косую черту, например так: '\"YYYY Month\"'.
'\"YYYY Month\"'
Если в функциях to_timestamp и to_date формат года определяется менее, чем 4 цифрами, например, как YYY, и в переданном значении года тоже меньше 4 цифр, год пересчитывается в максимально близкий к году 2020, т. е. 95 воспринимается как 1995.
95
В функциях to_timestamp и to_date с преобразованием YYYY связано ограничение, когда обрабатываемый год записывается более чем 4 цифрами. После YYYY необходимо будет добавить нецифровой символ или соответствующий код, иначе год всегда будет восприниматься как 4 цифры. Например, в to_date('200001131', 'YYYYMMDD') (с годом 20000) год будет интерпретирован как состоящий из 4 цифр; чтобы исправить ситуацию, нужно добавить нецифровой разделитель после года, как в to_date('20000-1131', 'YYYY-MMDD'), или код как в to_date('20000Nov31', 'YYYYMonDD').
to_date('200001131', 'YYYYMMDD')
to_date('20000-1131', 'YYYY-MMDD')
to_date('20000Nov31', 'YYYYMonDD')
Функции to_timestamp и to_date принимают поле CC (век), но игнорируют его, если в шаблоне есть поле YYY, YYYY или Y,YYY. Если CC используется с YY или Y, результатом будет год в данном столетии. Если присутствует только код столетия, без года, подразумевается первый год этого века.
Функции to_timestamp и to_date принимают названия и номера дней недели (DAY, D и связанные типы полей), но игнорируют их при вычислении результата. То же самое происходит с полями квартала (Q).
Функциям to_timestamp и to_date можно передать даты по недельному календарю ISO 8601 (отличающиеся от григорианских) одним из двух способов:
Год, номер недели и дня недели: например, to_date('2006-42-4', 'IYYY-IW-ID') возвращает дату 2006-10-19. Если день недели опускается, он считается равным 1 (понедельнику).
to_date('2006-42-4', 'IYYY-IW-ID')
2006-10-19
Год и день года: например, to_date('2006-291', 'IYYY-IDDD') также возвращает 2006-10-19.
to_date('2006-291', 'IYYY-IDDD')
Попытка ввести дату из смеси полей григорианского и недельного календаря ISO 8601 бессмысленна, поэтому это будет считаться ошибкой. В контексте ISO 8601 понятия «номер месяца» и «день месяца» не существуют, а в григорианском календаре нет понятия номера недели по ISO.
Тогда как to_date не примет смесь полей григорианского и недельного календаря ISO, to_char способна на это, так как форматы вроде YYYY-MM-DD (IYYY-IDDD) могут быть полезны. Но избегайте форматов типа IYYY-MM-DD; в противном случае с датами в начале года возможны сюрпризы. (За дополнительными сведениями обратитесь к Подразделу 9.9.1.)
YYYY-MM-DD (IYYY-IDDD)
IYYY-MM-DD
Функция to_timestamp воспринимает поля миллисекунд (MS) или микросекунд (US) как дробную часть число секунд. Например, to_timestamp('12.3', 'SS.MS') — это не 3 миллисекунды, а 300, так как это значение воспринимается как 12 + 0.3 секунды. Это значит, что для формата SS.MS входные значения 12.3, 12.30 и 12.300 задают одно и то же число миллисекунд. Чтобы получить три миллисекунды, время нужно записать в виде 12.003, тогда оно будет воспринято как 12 + 0.003 = 12.003 сек.
to_timestamp('12.3', 'SS.MS')
SS.MS
12.3
12.30
12.300
12.003
Ещё более сложный пример: to_timestamp('15:12:02.020.001230', 'HH24:MI:SS.MS.US') будет преобразовано в 15 часов, 12 минут и 2 секунды + 20 миллисекунд + 1230 микросекунд = 2.021230 seconds.
to_timestamp('15:12:02.020.001230', 'HH24:MI:SS.MS.US')
Нумерация дней недели в to_char(..., 'ID') соответствует функции extract(isodow from ...), но нумерация to_char(..., 'D') не соответствует нумерации, принятой в extract(dow from ...).
to_char(..., 'ID')
extract(isodow from ...)
to_char(..., 'D')
extract(dow from ...)
Функция to_char(interval) обрабатывает форматы HH and HH12 в рамках 12 часов, то есть 0 и 36 часов будут выводиться как 12, тогда как HH24 выводит число часов полностью, и для значений interval результат может превышать 23.
to_char(interval)
12
Коды форматирования числовых значений перечислены в Таблице 9.26.
Таблица 9.26. Коды форматирования чисел
9
0
.
,
PR
S
L
G
PL
SG
RN
V
EEEE
Замечания по использованию форматов чисел:
0 обозначает позицию цифры, которая будет выводиться всегда, даже если это незначащий ноль слева или справа. 9 также обозначает позицию цифры, но если это незначащий ноль слева, он заменяется пробелом, а если справа и задан режим заполнения, он удаляется. (Для функции to_number() эти два символа равнозначны.)
to_number()
Символы шаблона S, L, D и G представляют знак, символ денежной единицы, десятичную точку и разделитель тысяч, как их определяет текущая локаль (см. lc_monetary и lc_numeric). Символы точка и запятая представляют те же символы, обозначающие десятичную точку и разделитель тысяч, но не зависят от локали.
Если в шаблоне to_char() отсутствует явное указание положения знака, для него резервируется одна позиция рядом с числом (слева от него). Если левее нескольких 9 помещён S, знак также будет приписан слева к числу.
to_char()
Знак числа, полученный кодами SG, PL или MI, не присоединяется к числу; например, to_char(-12, 'MI9999') выдаёт '- 12', тогда как to_char(-12, 'S9999') — ' -12'. (В Oracle MI не может идти перед 9, наоборот 9 нужно указать перед MI.)
to_char(-12, 'MI9999')
'- 12'
to_char(-12, 'S9999')
' -12'
TH не преобразует значения меньше 0 и не поддерживает дробные числа.
PL, SG и TH — расширения PostgreSQL.
V c to_char умножает вводимое значение на 10^n, где n — число цифр, следующих за V. V с to_number подобным образом делит значение. Функции to_char и to_number не поддерживают V с дробными числами (например, 99.9V99 не допускается).
10^n
n
99.9V99
Код EEEE (научная запись) не может сочетаться с любыми другими вариантами форматирования или модификаторами, за исключением цифр и десятичной точки, и должен располагаться в конце строки шаблона (например, 9.99EEEE — допустимый шаблон).
9.99EEEE
Для изменения поведения кодов к ним могут быть применены определённые модификаторы. Например, FM99.99 обрабатывается как код 99.99 с модификатором FM. Все модификаторы для форматирования чисел перечислены в Таблице 9.27.
FM99.99
99.99
Таблица 9.27. Модификаторы шаблонов для форматирования чисел
999TH
999th
В Таблице 9.28 приведены некоторые примеры использования функции to_char.
Таблица 9.28. Примеры to_char
to_char(current_timestamp, 'Day, DD HH12:MI:SS')
'Tuesday , 06 05:39:18'
to_char(current_timestamp, 'FMDay, FMDD HH12:MI:SS')
'Tuesday, 6 05:39:18'
to_char(-0.1, '99.99')
' -.10'
to_char(-0.1, 'FM9.99')
'-.1'
to_char(-0.1, 'FM90.99')
'-0.1'
to_char(0.1, '0.9')
' 0.1'
to_char(12, '9990999.9')
' 0012.0'
to_char(12, 'FM9990999.9')
'0012.'
to_char(485, '999')
' 485'
to_char(-485, '999')
'-485'
to_char(485, '9 9 9')
' 4 8 5'
to_char(1485, '9,999')
' 1,485'
to_char(1485, '9G999')
' 1 485'
to_char(148.5, '999.999')
' 148.500'
to_char(148.5, 'FM999.999')
'148.5'
to_char(148.5, 'FM999.990')
'148.500'
to_char(148.5, '999D999')
' 148,500'
to_char(3148.5, '9G999D999')
' 3 148,500'
to_char(-485, '999S')
'485-'
to_char(-485, '999MI')
to_char(485, '999MI')
'485 '
to_char(485, 'FM999MI')
'485'
to_char(485, 'PL999')
'+485'
to_char(485, 'SG999')
to_char(-485, 'SG999')
to_char(-485, '9SG99')
'4-85'
to_char(-485, '999PR')
'<485>'
to_char(485, 'L999')
'DM 485'
to_char(485, 'RN')
' CDLXXXV'
to_char(485, 'FMRN')
'CDLXXXV'
to_char(5.2, 'FMRN')
'V'
to_char(482, '999th')
' 482nd'
to_char(485, '"Good number:"999')
'Good number: 485'
to_char(485.8, '"Pre:"999" Post:" .999')
'Pre: 485 Post: .800'
to_char(12, '99V999')
' 12000'
to_char(12.4, '99V999')
' 12400'
to_char(12.45, '99V9')
' 125'
to_char(0.0004859, '9.99EEEE')
' 4.86e-04'
Соглашаюсь с условиями обработки персональных данных