9.8. ФÑнкÑии ÑоÑмаÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°Ð½Ð½ÑÑ
ФÑнкÑии ÑоÑмаÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð² Postgres Pro пÑедоÑÑавлÑÑÑ Ð±Ð¾Ð³Ð°ÑÑй Ð½Ð°Ð±Ð¾Ñ Ð¸Ð½ÑÑÑÑменÑов Ð´Ð»Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑамÑÑ ÑазнÑÑ Ñипов даннÑÑ (даÑа/вÑемÑ, Ñелое, ÑиÑла Ñ Ð¿Ð»Ð°Ð²Ð°ÑÑей и ÑикÑиÑованной ÑоÑкой) в ÑоÑмаÑиÑованнÑе ÑÑÑоки и обÑаÑно. ÐÑе они пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 9.21. ÐÑе ÑÑи ÑÑнкÑии ÑледÑÐµÑ Ð¾Ð´Ð½Ð¾Ð¼Ñ ÑоглаÑениÑ: в пеÑвом аÑгÑменÑе пеÑедаÑÑÑÑ Ð·Ð½Ð°Ñение, коÑоÑое нÑжно оÑÑоÑмаÑиÑоваÑÑ, а во вÑоÑом â Ñаблон, опÑеделÑÑÑий ÑоÑÐ¼Ð°Ñ Ð²Ð²Ð¾Ð´Ð° или вÑвода.
ФÑнкÑÐ¸Ñ to_timestamp Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð¼ÐµÑÑ Ñакже один аÑгÑменÑ; в ÑÑом ÑлÑÑае она пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑиÑло double precision и пÑеобÑазÑÐµÑ ÐµÐ³Ð¾ из вÑемени Unix (ÑиÑло ÑекÑнд Ñ 1970-01-01 00:00:00+00) в timestamp with time zone (вÑÐµÐ¼Ñ Ñ ÑаÑовÑм поÑÑом). (ÐнаÑÐµÐ½Ð¸Ñ Ð²Ñемени Unix Ñипа Integer пÑоÑÑо неÑвно пÑиводÑÑÑÑ Ðº ÑÐ¸Ð¿Ñ double precision.)
ТаблиÑа 9.21. ФÑнкÑии ÑоÑмаÑиÑованиÑ
Шаблон вÑвода to_char Ð¼Ð¾Ð¶ÐµÑ ÑодеÑжаÑÑ ÑÑд кодов, коÑоÑÑе ÑаÑпознаÑÑÑÑ Ð¿Ñи ÑоÑмаÑиÑовании и заменÑÑÑÑÑ ÑооÑвеÑÑÑвÑÑÑими даннÑми. ÐÑбой ÑекÑÑ, коÑоÑÑй не ÑвлÑеÑÑÑ ÐºÐ¾Ð´Ð¾Ð¼, копиÑÑеÑÑÑ Ð² ÑезÑлÑÑÐ°Ñ Ð² неизменном виде. ÐодобнÑм обÑазом, в ÑÑÑоке Ñаблона ввода (Ð´Ð»Ñ Ð´ÑÑгиÑ
ÑÑнкÑий) ÐºÐ¾Ð´Ñ Ñаблона опÑеделÑÑÑ, какие знаÑÐµÐ½Ð¸Ñ ÑодеÑÐ¶Ð¸Ñ Ð¿ÐµÑÐµÐ´Ð°Ð²Ð°ÐµÐ¼Ð°Ñ ÑекÑÑÐ¾Ð²Ð°Ñ ÑÑÑока.
ÐÑе ÐºÐ¾Ð´Ñ ÑоÑмаÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°ÑÑ Ð¸ вÑемени пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 9.22.
ТаблиÑа 9.22. ÐÐ¾Ð´Ñ ÑоÑмаÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°ÑÑ/вÑемени
| Ðод | ÐпиÑание |
|---|---|
HH | ÑÐ°Ñ (01-12) |
HH12 | ÑÐ°Ñ (01-12) |
HH24 | ÑÐ°Ñ (00-23) |
MI | минÑÑа (00-59) |
SS | ÑекÑнда (00-59) |
MS | миллиÑекÑнда (000-999) |
US | микÑоÑекÑнда (000000-999999) |
SSSS | ÑиÑло ÑекÑнд Ñ Ð½Ð°Ñала ÑÑÑок (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; 1 Ð´ÐµÐ½Ñ â понеделÑник пеÑвой недели по 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 г. до н. Ñ.) |
Q | кваÑÑал (игноÑиÑÑеÑÑÑ ÑÑнкÑиÑми to_date и to_timestamp) |
RM | Ð½Ð¾Ð¼ÐµÑ Ð¼ÐµÑÑÑа ÑимÑкими ÑиÑÑами в веÑÑ Ð½ÐµÐ¼ ÑегиÑÑÑе (I-XII; I=ÑнваÑÑ) |
rm | Ð½Ð¾Ð¼ÐµÑ Ð¼ÐµÑÑÑа ÑимÑкими ÑиÑÑами в нижнем ÑегиÑÑÑе (i-xii; i=ÑнваÑÑ) |
TZ | ÑокÑаÑÑнное название ÑаÑового поÑÑа в веÑÑ
нем ÑегиÑÑÑе (поддеÑживаеÑÑÑ ÑолÑко в to_char) |
tz | ÑокÑаÑÑнное название ÑаÑового поÑÑа в нижнем ÑегиÑÑÑе (поддеÑживаеÑÑÑ ÑолÑко в to_char) |
OF | ÑмеÑение ÑаÑового поÑÑа Ð¾Ñ UTC (поддеÑживаеÑÑÑ ÑолÑко в to_char) |
РлÑбÑм кодам ÑоÑмаÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ добавиÑÑ Ð¼Ð¾Ð´Ð¸ÑикаÑоÑÑ, изменÑÑÑие иÑ
поведение. ÐапÑимеÑ, Ñаблон ÑоÑмаÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ FMMonth вклÑÑÐ°ÐµÑ ÐºÐ¾Ð´ Month Ñ Ð¼Ð¾Ð´Ð¸ÑикаÑоÑом FM. ÐодиÑикаÑоÑÑ, пÑедназнаÑеннÑе Ð´Ð»Ñ ÑоÑмаÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°ÑÑ/вÑемени, пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 9.23.
ТаблиÑа 9.23. ÐодиÑикаÑоÑÑ ÐºÐ¾Ð´Ð¾Ð² Ð´Ð»Ñ ÑоÑмаÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð´Ð°ÑÑ/вÑемени
| ÐодиÑикаÑÐ¾Ñ | ÐпиÑание | ÐÑÐ¸Ð¼ÐµÑ |
|---|---|---|
ÐÑиÑÑавка FM | Ñежим Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ (подавлÑÐµÑ Ð²ÐµÐ´ÑÑие нÑли и дополнение пÑобелами) | FMMonth |
ÐконÑание TH | оконÑание поÑÑдкового ÑиÑлиÑелÑного в веÑÑ Ð½ÐµÐ¼ ÑегиÑÑÑе | DDTH, напÑÐ¸Ð¼ÐµÑ 12TH |
ÐконÑание th | оконÑание поÑÑдкового ÑиÑлиÑелÑного в нижнем ÑегиÑÑÑе | DDth, напÑÐ¸Ð¼ÐµÑ 12th |
ÐÑиÑÑавка FX | глобалÑнÑй паÑамеÑÑ ÑикÑиÑованного ÑоÑмаÑа (Ñм. замеÑаниÑ) | FX Month DD Day |
ÐÑиÑÑавка TM | Ñежим пеÑевода (вÑводÑÑÑÑ Ð»Ð¾ÐºÐ°Ð»Ð¸Ð·Ð¾Ð²Ð°Ð½Ð½Ñе Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð´Ð½ÐµÐ¹ и меÑÑÑев, иÑÑ Ð¾Ð´Ñ Ð¸Ð· lc_time) | TMMonth |
ÐконÑание SP | Ñежим ÑиÑла пÑопиÑÑÑ (не Ñеализован) | DDSP |
ÐамеÑÐ°Ð½Ð¸Ñ Ð¿Ð¾ иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑоÑмаÑов даÑÑ/вÑемени:
FMподавлÑÐµÑ Ð´Ð¾Ð¿Ð¾Ð»Ð½ÑÑÑие пÑÐ¾Ð±ÐµÐ»Ñ Ð¸ нÑли ÑпÑава, коÑоÑÑе в пÑоÑивном ÑлÑÑае бÑдÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ñ, ÑÑÐ¾Ð±Ñ ÑезÑлÑÑÐ°Ñ Ð¸Ð¼ÐµÐ» ÑикÑиÑованнÑÑ ÑиÑинÑ. Ð Postgres Pro модиÑикаÑоÑFMдейÑÑвÑÐµÑ ÑолÑко на ÑледÑÑÑий код, Ñогда как в OracleFMÐµÑ Ð´ÐµÐ¹ÑÑвие ÑаÑпÑоÑÑÑанÑеÑÑÑ Ð½Ð° вÑе поÑледÑÑÑие кодÑ, пока не бÑÐ´ÐµÑ Ð¾ÑклÑÑено поÑледÑÑÑим модиÑикаÑоÑом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иto_dateпÑедназнаÑÐµÐ½Ñ Ð´Ð»Ñ Ð¾Ð±ÑабоÑки Ð²Ñ Ð¾Ð´Ð½ÑÑ ÑоÑмаÑов, Ð´Ð»Ñ ÐºÐ¾ÑоÑÑÑ Ð½ÐµÐ´Ð¾ÑÑаÑоÑно пÑоÑÑого пÑиведениÑ. ÐÑи ÑÑнкÑии инÑеÑпÑеÑиÑÑÑÑ Ð²Ð²Ð¾Ð´Ð¸Ð¼Ñе даннÑе Ñ Ð¿Ð¾ÑлаблениÑми, пÑовеÑÑÑ ÑолÑко гÑÑбÑе оÑибки. ХоÑÑ Ð¾Ð½Ð¸ вÑдаÑÑ ÐºÐ¾ÑÑекÑнÑе даннÑе, ÑезÑлÑÑÐ°Ñ Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑлиÑаÑÑÑÑ Ð¾Ñ Ð¾Ð¶Ð¸Ð´Ð°ÐµÐ¼Ð¾Ð³Ð¾. Ð ÑаÑÑноÑÑи, Ð²Ñ Ð¾Ð´Ð½Ñе аÑгÑменÑÑ ÑÑÐ¸Ñ ÑÑнкÑий не огÑаниÑиваÑÑÑÑ Ð¾Ð±ÑÑнÑми диапазонами, Ñак ÑÑоto_date('20096040','YYYYMMDD')вÑдаÑÑ2014-01-17, а не оÑибкÑ. С пÑиведением Ñакого не пÑоиÑÑ Ð¾Ð´Ð¸Ñ.Ð¨Ð°Ð±Ð»Ð¾Ð½Ñ Ð´Ð»Ñ ÑÑнкÑий
to_charмогÑÑ ÑодеÑжаÑÑ Ð¾Ð±ÑÑнÑй ÑекÑÑ; он бÑÐ´ÐµÑ Ð²Ñведен в неизменном виде. ЧÑÐ¾Ð±Ñ Ð²ÑвеÑÑи ÑекÑÑ Ð¿ÑинÑдиÑелÑно, напÑимеÑ, еÑли в нÑм оказÑваÑÑÑÑ Ð¿Ð¾Ð´Ð´ÐµÑживаемÑе кодÑ, его можно заклÑÑиÑÑ Ð² кавÑÑки. ÐапÑимеÑ, в ÑÑÑоке'"Hello Year "YYYY', кодYYYYбÑÐ´ÐµÑ Ð·Ð°Ð¼ÐµÐ½Ñн номеÑом года, а бÑкваYв ÑловеYearоÑÑанеÑÑÑ Ð½ÐµÐ¸Ð·Ð¼ÐµÐ½Ð½Ð¾Ð¹. Ð ÑÑнкÑиÑÑto_date,to_numberиto_timestampпÑи обÑабоÑке подÑÑÑоки в кавÑÑÐºÐ°Ñ Ð¿ÑоÑÑо пÑопÑÑкаÑÑÑÑ ÑÐ¸Ð¼Ð²Ð¾Ð»Ñ Ð²Ñ Ð¾Ð´Ð½Ð¾Ð¹ ÑÑÑоки по ÑиÑÐ»Ñ Ñимволов в подÑÑÑоке, напÑÐ¸Ð¼ÐµÑ Ð´Ð»Ñ"XX"бÑдÑÑ Ð¿ÑопÑÑÐµÐ½Ñ Ð´Ð²Ð° Ñимвола.ÐÑли Ð²Ñ Ñ Ð¾ÑиÑе полÑÑиÑÑ Ð² ÑезÑлÑÑаÑе кавÑÑки, пеÑед ними нÑжно добавиÑÑ Ð¾Ð±ÑаÑнÑÑ ÐºÐ¾ÑÑÑ ÑеÑÑÑ, напÑÐ¸Ð¼ÐµÑ Ñак:
'\"YYYY Month\"'.ÐÑли ÑоÑÐ¼Ð°Ñ Ð³Ð¾Ð´Ð° опÑеделÑеÑÑÑ Ð¼ÐµÐ½ÐµÐµ, Ñем 4 ÑиÑÑами, напÑимеÑ, как
YYY, и в пеÑеданном знаÑении года Ñоже менÑÑе 4 ÑиÑÑ, год пеÑеÑÑиÑÑваеÑÑÑ Ð² макÑималÑно близкий к Ð³Ð¾Ð´Ñ 2020, Ñ. е.95воÑпÑинимаеÑÑÑ ÐºÐ°Ðº 1995.С пÑеобÑазованием
YYYYиз ÑÑÑоки в ÑипtimestampилиdateÑвÑзано огÑаниÑение, когда обÑабаÑÑваемÑй год запиÑÑваеÑÑÑ Ð±Ð¾Ð»ÐµÐµ Ñем 4 ÑиÑÑами. ÐоÑлеYYYYÐ½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ бÑÐ´ÐµÑ Ð´Ð¾Ð±Ð°Ð²Ð¸ÑÑ Ð½Ðµ ÑиÑÑовой Ñимвол или ÑооÑвеÑÑÑвÑÑÑий код, инаÑе год вÑегда бÑÐ´ÐµÑ Ð²Ð¾ÑпÑинимаÑÑÑÑ ÐºÐ°Ðº 4 ÑиÑÑÑ. ÐапÑимеÑ, вto_date('200001131', 'YYYYMMDD')(Ñ Ð³Ð¾Ð´Ð¾Ð¼ 20000) год бÑÐ´ÐµÑ Ð¸Ð½ÑеÑпÑеÑиÑован как ÑоÑÑоÑÑий из 4 ÑиÑÑ; ÑÑÐ¾Ð±Ñ Ð¸ÑпÑавиÑÑ ÑиÑÑаÑиÑ, нÑжно добавиÑÑ Ð½Ðµ ÑиÑÑовой ÑазделиÑÐµÐ»Ñ Ð¿Ð¾Ñле года, как вto_date('20000-1131', 'YYYY-MMDD'), или код как вto_date('20000Nov31', 'YYYYMonDD').РпÑеобÑазованиÑÑ Ð¸Ð· ÑÑÑоки в Ñип
timestampилиdate, полеCC(век) игноÑиÑÑеÑÑÑ, еÑли Ñаблон вклÑÑÐ°ÐµÑ Ð¿Ð¾Ð»ÑYYY,YYYYилиY,YYY. ÐогдаCCиÑполÑзÑеÑÑÑ ÑYYилиY, год вÑÑиÑлÑеÑÑÑ ÐºÐ°Ðº год данного ÑÑолеÑиÑ. ÐÑли пÑиÑÑÑÑÑвÑÐµÑ ÑолÑко код ÑÑолеÑиÑ, без года, подÑазÑмеваеÑÑÑ Ð¿ÐµÑвÑй год ÑÑого века.ÐаÑÑ Ð¿Ð¾ неделÑÐ½Ð¾Ð¼Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°ÑÑ ISO 8601 (оÑлиÑаÑÑиеÑÑ Ð¾Ñ Ð³ÑигоÑианÑÐºÐ¸Ñ ) можно пеÑедаÑÑ ÑÑнкÑиÑм
to_timestampиto_dateодним из двÑÑ ÑпоÑобов:Ðод, Ð½Ð¾Ð¼ÐµÑ Ð½ÐµÐ´ÐµÐ»Ð¸ и Ð´Ð½Ñ Ð½ÐµÐ´ÐµÐ»Ð¸: напÑимеÑ,
to_date('2006-42-4', 'IYYY-IW-ID')возвÑаÑÐ°ÐµÑ Ð´Ð°ÑÑ2006-10-19. ÐÑли Ð´ÐµÐ½Ñ Ð½ÐµÐ´ÐµÐ»Ð¸ опÑÑкаеÑÑÑ, он ÑÑиÑаеÑÑÑ ÑавнÑм 1 (понеделÑникÑ).Ðод и Ð´ÐµÐ½Ñ Ð³Ð¾Ð´Ð°: напÑимеÑ,
to_date('2006-291', 'IYYY-IDDD')Ñакже возвÑаÑаеÑ2006-10-19.
ÐопÑÑка ввеÑÑи даÑÑ Ð¸Ð· ÑмеÑи полей гÑигоÑианÑкого и неделÑного календаÑÑ ISO 8601 беÑÑмÑÑленна, поÑÑÐ¾Ð¼Ñ ÑÑо бÑÐ´ÐµÑ ÑÑиÑаÑÑÑÑ Ð¾Ñибкой. РконÑекÑÑе ISO 8601 понÑÑÐ¸Ñ Â«Ð½Ð¾Ð¼ÐµÑ Ð¼ÐµÑÑÑа» и Â«Ð´ÐµÐ½Ñ Ð¼ÐµÑÑÑа» не ÑÑÑеÑÑвÑÑÑ, а в гÑигоÑианÑком календаÑе Ð½ÐµÑ Ð¿Ð¾Ð½ÑÑÐ¸Ñ Ð½Ð¾Ð¼ÐµÑа недели по ISO.
Ðнимание
Тогда как
to_dateне пÑÐ¸Ð¼ÐµÑ ÑмеÑÑ Ð¿Ð¾Ð»ÐµÐ¹ гÑигоÑианÑкого и неделÑного календаÑÑ ISO,to_charÑпоÑобна на ÑÑо, Ñак как ÑоÑмаÑÑ Ð²ÑодеYYYY-MM-DD (IYYY-IDDD)могÑÑ Ð±ÑÑÑ Ð¿Ð¾Ð»ÐµÐ·Ð½Ñ. Ðо избегайÑе ÑоÑмаÑов ÑипаIYYY-MM-DD; в пÑоÑивном ÑлÑÑае Ñ Ð´Ð°Ñами в наÑале года Ð²Ð¾Ð·Ð¼Ð¾Ð¶Ð½Ñ ÑÑÑпÑизÑ. (Ðа дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 9.9.1.)ÐÑи пÑеобÑазовании из ÑекÑÑовой ÑÑÑоки в
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('15:12:02.020.001230', 'HH24:MI:SS.MS.US')бÑÐ´ÐµÑ Ð¿ÑеобÑазовано в 15 ÑаÑов, 12 минÑÑ Ð¸ 2 ÑекÑÐ½Ð´Ñ + 20 миллиÑекÑнд + 1230 микÑоÑекÑнд = 2.021230 seconds.ÐÑмеÑаÑÐ¸Ñ Ð´Ð½ÐµÐ¹ недели в
to_char(..., 'ID')ÑооÑвеÑÑÑвÑÐµÑ ÑÑнкÑииextract(isodow from ...), но нÑмеÑаÑиÑto_char(..., 'D')не ÑооÑвеÑÑÑвÑÐµÑ Ð½ÑмеÑаÑии, пÑинÑÑой вextract(dow from ...).ФÑнкÑиÑ
to_char(interval)обÑабаÑÑÐ²Ð°ÐµÑ ÑоÑмаÑÑHHиHH12в ÑÐ°Ð¼ÐºÐ°Ñ 12 ÑаÑов, Ñо еÑÑÑ 0 и 36 ÑаÑов бÑдÑÑ Ð²ÑводиÑÑÑÑ ÐºÐ°Ðº12, Ñогда какHH24вÑÐ²Ð¾Ð´Ð¸Ñ Ð·Ð½Ð°Ñение полноÑÑÑÑ Ð¸ Ð´Ð»Ñ Ð¸Ð½ÑеÑвалов вÑводимое знаÑение Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑевÑÑаÑÑ 23.
ÐÐ¾Ð´Ñ ÑоÑмаÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑиÑловÑÑ Ð·Ð½Ð°Ñений пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 9.24.
ТаблиÑа 9.24. ÐÐ¾Ð´Ñ ÑоÑмаÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑиÑел
| Ðод | ÐпиÑание |
|---|---|
9 | позиÑÐ¸Ñ ÑиÑÑÑ (Ð¼Ð¾Ð¶ÐµÑ Ð¾ÑÑÑÑÑÑвоваÑÑ, еÑли ÑиÑÑа незнаÑаÑаÑ) |
0 | позиÑÐ¸Ñ ÑиÑÑÑ (пÑиÑÑÑÑÑвÑÐµÑ Ð²Ñегда, даже еÑли ÑиÑÑа незнаÑаÑаÑ) |
. (ÑоÑка) | деÑÑÑиÑÐ½Ð°Ñ ÑоÑка |
, (запÑÑаÑ) | ÑазделиÑÐµÐ»Ñ Ð³ÑÑпп (ÑÑÑÑÑ) |
PR | оÑÑиÑаÑелÑное знаÑение в ÑгловÑÑ ÑÐºÐ¾Ð±ÐºÐ°Ñ |
S | знак, добавлÑемÑй к ÑиÑÐ»Ñ (Ñ ÑÑÑÑом локали) |
L | Ñимвол денежной единиÑÑ (Ñ ÑÑÑÑом локали) |
D | ÑазделиÑÐµÐ»Ñ Ñелой и дÑобной ÑаÑÑи ÑиÑла (Ñ ÑÑÑÑом локали) |
G | ÑазделиÑÐµÐ»Ñ Ð³ÑÑпп (Ñ ÑÑÑÑом локали) |
MI | знак минÑÑ Ð² заданной позиÑии (еÑли ÑиÑло < 0) |
PL | знак плÑÑ Ð² заданной позиÑии (еÑли ÑиÑло > 0) |
SG | знак плÑÑ Ð¸Ð»Ð¸ минÑÑ Ð² заданной позиÑии |
RN | ÑиÑло ÑимÑкими ÑиÑÑами (в диапазоне Ð¾Ñ 1 до 3999) |
TH или th | оконÑание поÑÑдкового ÑиÑлиÑелÑного |
V | Ñдвиг на заданное колиÑеÑÑво ÑиÑÑ (Ñм. замеÑаниÑ) |
EEEE | ÑкÑпоненÑиалÑÐ½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ ÑиÑла |
ÐамеÑÐ°Ð½Ð¸Ñ Ð¿Ð¾ иÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑоÑмаÑов ÑиÑел:
0обознаÑÐ°ÐµÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ ÑиÑÑÑ, коÑоÑÐ°Ñ Ð±ÑÐ´ÐµÑ Ð²ÑводиÑÑÑÑ Ð²Ñегда, даже еÑли ÑÑо незнаÑаÑий Ð½Ð¾Ð»Ñ Ñлева или ÑпÑава.9Ñакже обознаÑÐ°ÐµÑ Ð¿Ð¾Ð·Ð¸ÑÐ¸Ñ ÑиÑÑÑ, но еÑли ÑÑо незнаÑаÑий Ð½Ð¾Ð»Ñ Ñлева, он заменÑеÑÑÑ Ð¿Ñобелом, а еÑли ÑпÑава и задан Ñежим заполнениÑ, он ÑдалÑеÑÑÑ. (ÐÐ»Ñ ÑÑнкÑииto_number()ÑÑи два Ñимвола ÑавнознаÑнÑ.)Ð¡Ð¸Ð¼Ð²Ð¾Ð»Ñ Ñаблона
S,L,DиGпÑедÑÑавлÑÑÑ Ð·Ð½Ð°Ðº, Ñимвол денежной единиÑÑ, деÑÑÑиÑнÑÑ ÑоÑÐºÑ Ð¸ ÑазделиÑÐµÐ»Ñ ÑÑÑÑÑ, как Ð¸Ñ Ð¾Ð¿ÑеделÑÐµÑ ÑекÑÑÐ°Ñ Ð»Ð¾ÐºÐ°Ð»Ñ (Ñм. lc_monetary и lc_numeric). Ð¡Ð¸Ð¼Ð²Ð¾Ð»Ñ ÑоÑка и запÑÑÐ°Ñ Ð¿ÑедÑÑавлÑÑÑ Ñе же ÑимволÑ, обознаÑаÑÑие деÑÑÑиÑнÑÑ ÑоÑÐºÑ Ð¸ ÑазделиÑÐµÐ»Ñ ÑÑÑÑÑ, но не завиÑÑÑ Ð¾Ñ Ð»Ð¾ÐºÐ°Ð»Ð¸.ÐÑли в Ñаблоне
to_char()оÑÑÑÑÑÑвÑÐµÑ Ñвное Ñказание Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð·Ð½Ð°ÐºÐ°, Ð´Ð»Ñ Ð½ÐµÐ³Ð¾ ÑезеÑвиÑÑеÑÑÑ Ð¾Ð´Ð½Ð° позиÑÐ¸Ñ ÑÑдом Ñ ÑиÑлом (Ñлева Ð¾Ñ Ð½ÐµÐ³Ð¾). ÐÑли левее неÑколÑкиÑ9помеÑÑнS, знак Ñакже бÑÐ´ÐµÑ Ð¿ÑипиÑан Ñлева к ÑиÑлÑ.Ðнак ÑиÑла, полÑÑеннÑй кодами
SG,PLилиMI, не пÑиÑоединÑеÑÑÑ Ðº ÑиÑлÑ; напÑимеÑ,to_char(-12, 'MI9999')вÑдаÑÑ'-  12', Ñогда какto_char(-12, 'S9999')â'  -12'. (Ð OracleMIне Ð¼Ð¾Ð¶ÐµÑ Ð¸Ð´Ñи пеÑед9, наобоÑоÑ9нÑжно ÑказаÑÑ Ð¿ÐµÑедMI.)THне пÑеобÑазÑÐµÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ Ð¼ÐµÐ½ÑÑе 0 и не поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð´ÑобнÑе ÑиÑла.PL,SGиTHâ ÑаÑÑиÑÐµÐ½Ð¸Ñ Postgres Pro.Vпо ÑÑÑи ÑÐ¼Ð½Ð¾Ð¶Ð°ÐµÑ Ð²Ð²Ð¾Ð´Ð¸Ð¼Ð¾Ðµ знаÑение на10^, гдеnnâ ÑиÑло ÑиÑÑ, ÑледÑÑÑÐ¸Ñ Ð·Ð°V. ФÑнкÑиÑto_charне поддеÑживаеÑVÑ Ð´ÑобнÑми ÑиÑлами (напÑимеÑ,99.9V99не допÑÑкаеÑÑÑ).Ðод
EEEE(наÑÑÐ½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ) не Ð¼Ð¾Ð¶ÐµÑ ÑоÑеÑаÑÑÑÑ Ñ Ð»ÑбÑми дÑÑгими ваÑианÑами ÑоÑмаÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ Ð¸Ð»Ð¸ модиÑикаÑоÑами, за иÑклÑÑением ÑиÑÑ Ð¸ деÑÑÑиÑной ÑоÑки, и должен ÑаÑполагаÑÑÑÑ Ð² конÑе ÑÑÑоки Ñаблона (напÑимеÑ,9.99EEEEâ допÑÑÑимÑй Ñаблон).
ÐÐ»Ñ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ ÐºÐ¾Ð´Ð¾Ð² к ним могÑÑ Ð±ÑÑÑ Ð¿ÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ñ Ð¾Ð¿ÑеделÑннÑе модиÑикаÑоÑÑ. ÐапÑимеÑ, FM99.99 обÑабаÑÑваеÑÑÑ ÐºÐ°Ðº код 99.99 Ñ Ð¼Ð¾Ð´Ð¸ÑикаÑоÑом FM. ÐÑе модиÑикаÑоÑÑ Ð´Ð»Ñ ÑоÑмаÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑиÑел пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 9.25.
ТаблиÑа 9.25. ÐодиÑикаÑоÑÑ Ñаблонов Ð´Ð»Ñ ÑоÑмаÑиÑÐ¾Ð²Ð°Ð½Ð¸Ñ ÑиÑел
| ÐодиÑикаÑÐ¾Ñ | ÐпиÑание | ÐÑÐ¸Ð¼ÐµÑ |
|---|---|---|
ÐÑиÑÑавка FM | Ñежим Ð·Ð°Ð¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ (подавлÑÐµÑ Ð·Ð°Ð²ÐµÑÑаÑÑие нÑли и дополнение пÑобелами) | FM99.99 |
ÐконÑание TH | оконÑание поÑÑдкового ÑиÑлиÑелÑного в веÑÑ Ð½ÐµÐ¼ ÑегиÑÑÑе | 999TH |
ÐконÑание th | оконÑание поÑÑдкового ÑиÑлиÑелÑного в нижнем ÑегиÑÑÑе | 999th |
РТаблиÑе 9.26 пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð½ÐµÐºÐ¾ÑоÑÑе пÑимеÑÑ Ð¸ÑполÑÐ·Ð¾Ð²Ð°Ð½Ð¸Ñ ÑÑнкÑии to_char.
ТаблиÑа 9.26. ÐÑимеÑÑ 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') | '485-' |
to_char(485, '999MI') | '485Â ' |
to_char(485, 'FM999MI') | '485' |
to_char(485, 'PL999') | '+485' |
to_char(485, 'SG999') | '+485' |
to_char(-485, 'SG999') | '-485' |
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' |