8.5. Ð¢Ð¸Ð¿Ñ Ð´Ð°ÑÑ/вÑемени #
Postgres Pro поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð¿Ð¾Ð»Ð½Ñй Ð½Ð°Ð±Ð¾Ñ Ñипов даÑÑ Ð¸ вÑемени SQL, показаннÑй в ТаблиÑе 8.9. ÐпеÑаÑии, возможнÑе Ñ ÑÑими Ñипами даннÑÑ , опиÑÐ°Ð½Ñ Ð² Разделе 9.9. ÐÑе даÑÑ ÑÑиÑаÑÑÑÑ Ð¿Ð¾ ÐÑигоÑианÑÐºÐ¾Ð¼Ñ ÐºÐ°Ð»ÐµÐ½Ð´Ð°ÑÑ, даже Ð´Ð»Ñ Ð²Ñемени до его Ð²Ð²ÐµÐ´ÐµÐ½Ð¸Ñ (за дополниÑелÑнÑми ÑведениÑми обÑаÑиÑеÑÑ Ðº РазделÑ B.6).
ТаблиÑа 8.9. Ð¢Ð¸Ð¿Ñ Ð´Ð°ÑÑ/вÑемени
| ÐÐ¼Ñ | Ð Ð°Ð·Ð¼ÐµÑ | ÐпиÑание | ÐаименÑÑее знаÑение | ÐаиболÑÑее знаÑение | ТоÑноÑÑÑ |
|---|---|---|---|---|---|
timestamp [ ( | 8 Ð±Ð°Ð¹Ñ | даÑа и вÑÐµÐ¼Ñ (без ÑаÑового поÑÑа) | 4713 до н. Ñ. | 294276 н. Ñ. | 1 микÑоÑекÑнда |
timestamp [ ( | 8 Ð±Ð°Ð¹Ñ | даÑа и вÑÐµÐ¼Ñ (Ñ ÑаÑовÑм поÑÑом) | 4713 до н. Ñ. | 294276 н. Ñ. | 1 микÑоÑекÑнда |
date | 4 байÑа | даÑа (без вÑемени ÑÑÑок) | 4713 до н. Ñ. | 5874897 н. Ñ. | 1 Ð´ÐµÐ½Ñ |
time [ ( | 8 Ð±Ð°Ð¹Ñ | вÑÐµÐ¼Ñ ÑÑÑок (без даÑÑ) | 00:00:00 | 24:00:00 | 1 микÑоÑекÑнда |
time [ ( | 12 Ð±Ð°Ð¹Ñ | вÑÐµÐ¼Ñ Ð´Ð½Ñ (без даÑÑ), Ñ ÑаÑовÑм поÑÑом | 00:00:00+1559 | 24:00:00-1559 | 1 микÑоÑекÑнда |
interval [ | 16 Ð±Ð°Ð¹Ñ | вÑеменной инÑеÑвал | -178000000 Ð»ÐµÑ | 178000000 Ð»ÐµÑ | 1 микÑоÑекÑнда |
ÐÑимеÑание
СÑандаÑÑ SQL ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ Ñип timestamp подÑазÑмевал timestamp without time zone (вÑÐµÐ¼Ñ Ð±ÐµÐ· ÑаÑового поÑÑа), и Postgres Pro ÑледÑÐµÑ ÑÑомÑ. ÐÐ»Ñ ÐºÑаÑкоÑÑи timestamp with time zone можно запиÑаÑÑ ÐºÐ°Ðº timestamptz; ÑÑо ÑаÑÑиÑение Postgres Pro.
Ð¢Ð¸Ð¿Ñ time, timestamp и interval пÑинимаÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑное знаÑение ÑоÑноÑÑи p, опÑеделÑÑÑее, ÑколÑко знаков поÑле запÑÑой должно ÑоÑ
ÑанÑÑÑÑÑ Ð² ÑекÑндаÑ
. Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑоÑноÑÑÑ Ð½Ðµ огÑаниÑиваеÑÑÑ. ÐопÑÑÑимÑе знаÑÐµÐ½Ð¸Ñ p Ð»ÐµÐ¶Ð°Ñ Ð² инÑеÑвале Ð¾Ñ 0 до 6.
Тип interval дополниÑелÑно позволÑÐµÑ Ð¾Ð³ÑаниÑиÑÑ Ð½Ð°Ð±Ð¾Ñ ÑоÑ
ÑанÑемÑÑ
полей ÑледÑÑÑими ÑÑазами:
YEAR MONTH DAY HOUR MINUTE SECOND YEAR TO MONTH DAY TO HOUR DAY TO MINUTE DAY TO SECOND HOUR TO MINUTE HOUR TO SECOND MINUTE TO SECOND
ÐамеÑÑÑе, ÑÑо еÑли ÑÐºÐ°Ð·Ð°Ð½Ñ Ð¸ полÑ, и ÑоÑноÑÑÑ p, Ñказание Ð¿Ð¾Ð»Ñ Ð´Ð¾Ð»Ð¶Ð½Ð¾ вклÑÑаÑÑ SECOND, Ñак как ÑоÑноÑÑÑ Ð¿Ñименима ÑолÑко к ÑекÑндам.
Тип time with time zone опÑеделÑн ÑÑандаÑÑом SQL, но в его опÑеделении опиÑÐ°Ð½Ñ ÑвойÑÑва ÑомниÑелÑной ÑенноÑÑи. РболÑÑинÑÑве ÑлÑÑаев ÑоÑеÑание Ñипов date, time, timestamp without time zone и timestamp with time zone ÑдовлеÑвоÑÑÐµÑ Ð²Ñе поÑÑебноÑÑи в ÑÑнкÑионалÑноÑÑи даÑ/вÑемени, возникаÑÑие в пÑиложениÑÑ
.
8.5.1. Ðвод даÑÑ/вÑемени #
ÐнаÑÐµÐ½Ð¸Ñ Ð´Ð°ÑÑ Ð¸ вÑемени пÑинимаÑÑÑÑ Ð¿ÑакÑиÑеÑки в лÑбом ÑазÑмном ÑоÑмаÑе, вклÑÑÐ°Ñ ISO 8601, SQL-ÑовмеÑÑимÑй, ÑÑадиÑионнÑй ÑоÑÐ¼Ð°Ñ POSTGRES и дÑÑгие. РнекоÑоÑÑÑ
ÑоÑмаÑаÑ
поÑÑдок даÑÑ, меÑÑÑа и года во вводимой даÑе неоднознаÑен и поÑÑÐ¾Ð¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ Ñвное опÑеделение ÑоÑмаÑа. ÐÐ»Ñ ÑÑого пÑедназнаÑен паÑамеÑÑ DateStyle. Ðогда он Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение MDY, вÑбиÑаеÑÑÑ Ð¸Ð½ÑеÑпÑеÑаÑÐ¸Ñ Ð¼ÐµÑÑÑ-денÑ-год, знаÑÐµÐ½Ð¸Ñ DMY ÑооÑвеÑÑÑвÑÐµÑ Ð´ÐµÐ½Ñ-меÑÑÑ-год, а YMD â год-меÑÑÑ-денÑ.
Postgres Pro обÑабаÑÑÐ²Ð°ÐµÑ Ð²Ð²Ð¾Ð´Ð¸Ð¼Ñе знаÑÐµÐ½Ð¸Ñ Ð´Ð°ÑÑ/вÑемени более гибко, Ñем Ñого ÑÑебÑÐµÑ ÑÑандаÑÑ SQL. ТоÑнÑе пÑавила ÑазбоÑа даÑÑ/вÑемени и ÑаÑпознаваемÑе ÑекÑÑовÑе полÑ, в Ñом ÑиÑле Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¼ÐµÑÑÑев, дней недели и ÑаÑовÑÑ Ð¿Ð¾ÑÑов опиÑÐ°Ð½Ñ Ð² ÐÑиложении B.
ÐомниÑе, ÑÑо лÑбÑе вводимÑе знаÑÐµÐ½Ð¸Ñ Ð´Ð°ÑÑ Ð¸ вÑемени нÑжно заклÑÑаÑÑ Ð² апоÑÑÑоÑÑ, как ÑекÑÑовÑе ÑÑÑоки. Ðа дополниÑелÑной инÑоÑмаÑией обÑаÑиÑеÑÑ Ðº ÐодÑазделÑ 4.1.2.7. SQL пÑедÑÑмаÑÑÐ¸Ð²Ð°ÐµÑ ÑледÑÑÑий ÑинÑакÑиÑ:
Ñип[ (p) ] 'знаÑение'
ÐдеÑÑ p â необÑзаÑелÑное Ñказание ÑоÑноÑÑи, опÑеделÑÑÑее ÑиÑло знаков поÑле ÑоÑки в ÑекÑндаÑ
. ТоÑноÑÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð¾Ð¿Ñеделена Ð´Ð»Ñ Ñипов time, timestamp и interval в инÑеÑвале Ð¾Ñ 0 до 6. ÐÑли в опÑеделении конÑÑанÑÑ ÑоÑноÑÑÑ Ð½Ðµ Ñказана, она ÑÑиÑаеÑÑÑ Ñавной ÑоÑноÑÑи знаÑÐµÐ½Ð¸Ñ Ð² ÑÑÑоке (но не болÑÑе 6 ÑиÑÑ).
8.5.1.1. ÐаÑÑ #
РТаблиÑе 8.10 пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð½ÐµÐºÐ¾ÑоÑÑе допÑÑÑимÑе знаÑÐµÐ½Ð¸Ñ Ñипа date.
ТаблиÑа 8.10. ÐводимÑе даÑÑ
| ÐÑÐ¸Ð¼ÐµÑ | ÐпиÑание |
|---|---|
| 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 до н. Ñ. |
8.5.1.2. ÐÑÐµÐ¼Ñ #
ÐÐ»Ñ Ñ
ÑÐ°Ð½ÐµÐ½Ð¸Ñ Ð²Ñемени ÑÑÑок без даÑÑ Ð¿ÑедназнаÑÐµÐ½Ñ ÑÐ¸Ð¿Ñ time [ ( и p) ] without time zonetime [ (. Тип p) ] with time zonetime без ÑÑоÑÐ½ÐµÐ½Ð¸Ñ ÑквиваленÑен ÑÐ¸Ð¿Ñ time without time zone.
ÐопÑÑÑимÑе вводимÑе знаÑÐµÐ½Ð¸Ñ ÑÑиÑ
Ñипов ÑоÑÑоÑÑ Ð¸Ð· запиÑи вÑемени ÑÑÑок и необÑзаÑелÑного ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÑаÑового поÑÑа. (См. ТаблиÑÑ 8.11 и ТаблиÑÑ 8.12.) ÐÑли в знаÑении Ð´Ð»Ñ Ñипа time without time zone ÑказÑваеÑÑÑ ÑаÑовой поÑÑ, он пÑоÑÑо игноÑиÑÑеÑÑÑ. Так же бÑÐ´ÐµÑ Ð¸Ð³Ð½Ð¾ÑиÑоваÑÑÑÑ Ð´Ð°Ñа, еÑли ÐµÑ ÑказаÑÑ, за иÑклÑÑением ÑлÑÑаев, когда в Ñказанном ÑаÑовом поÑÑе пÑинÑÑ Ð¿ÐµÑеÑ
од на леÑнее вÑемÑ, напÑÐ¸Ð¼ÐµÑ America/New_York. Рданном ÑлÑÑае ÑказаÑÑ Ð´Ð°ÑÑ Ð½ÐµÐ¾Ð±Ñ
одимо, ÑÑÐ¾Ð±Ñ ÑиÑÑема могла опÑеделиÑÑ, пÑименÑеÑÑÑ Ð»Ð¸ обÑÑное или леÑнее вÑемÑ. СооÑвеÑÑÑвÑÑÑее ÑмеÑение ÑаÑового поÑÑа запиÑÑваеÑÑÑ Ð² знаÑении time with time zone и вÑводиÑÑÑ Ð±ÐµÐ· изменений, оно не пÑивÑзано к акÑÐ¸Ð²Ð½Ð¾Ð¼Ñ ÑаÑÐ¾Ð²Ð¾Ð¼Ñ Ð¿Ð¾ÑÑÑ.
ТаблиÑа 8.11. Ðводимое вÑемÑ
| ÐÑÐ¸Ð¼ÐµÑ | ÐпиÑание |
|---|---|
04:05:06.789 | ISO 8601 |
04:05:06 | ISO 8601 |
04:05 | ISO 8601 |
040506 | ISO 8601 |
04:05 AM | Ñо же, ÑÑо и 04:05; AM не менÑÐµÑ Ð·Ð½Ð°Ñение вÑемени |
04:05 PM | Ñо же, ÑÑо и 16:05; ÑаÑÑ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ <= 12 |
04:05:06.789-8 | ISO 8601, Ñ ÑаÑовÑм поÑÑом в виде ÑмеÑÐµÐ½Ð¸Ñ Ð¾Ñ UTC |
04:05:06-08:00 | ISO 8601, Ñ ÑаÑовÑм поÑÑом в виде ÑмеÑÐµÐ½Ð¸Ñ Ð¾Ñ UTC |
04:05-08:00 | ISO 8601, Ñ ÑаÑовÑм поÑÑом в виде ÑмеÑÐµÐ½Ð¸Ñ Ð¾Ñ UTC |
040506-08 | ISO 8601, Ñ ÑаÑовÑм поÑÑом в виде ÑмеÑÐµÐ½Ð¸Ñ Ð¾Ñ UTC |
040506+0730 | ISO 8601, Ñ ÑаÑовÑм поÑÑом, задаваемÑм неÑелоÑиÑленнÑм ÑмеÑением Ð¾Ñ UTC |
040506+07:30:00 | ÑмеÑение Ð¾Ñ UTC, заданное до ÑекÑнд (не допÑÑкаеÑÑÑ Ð² ISO 8601) |
04:05:06 PST | ÑаÑовой поÑÑ Ð·Ð°Ð´Ð°ÑÑÑÑ Ð°Ð±Ð±ÑевиаÑÑÑой |
2003-04-12 04:05:06 America/New_York | ÑаÑовой поÑÑ Ð·Ð°Ð´Ð°ÑÑÑÑ Ð¿Ð¾Ð»Ð½Ñм названием |
ТаблиÑа 8.12. ÐводимÑй ÑаÑовой поÑÑ
| ÐÑÐ¸Ð¼ÐµÑ | ÐпиÑание |
|---|---|
PST | аббÑевиаÑÑÑа (Pacific Standard Time, СÑандаÑÑное ÑÐ¸Ñ Ð¾Ð¾ÐºÐµÐ°Ð½Ñкое вÑемÑ) |
America/New_York | полное название ÑаÑового поÑÑа |
PST8PDT | Ñказание ÑаÑового поÑÑа в ÑÑиле POSIX |
-8:00:00 | ÑмеÑение ÑаÑового поÑÑа PST Ð¾Ñ UTC |
-8:00 | ÑмеÑение ÑаÑового поÑÑа PST Ð¾Ñ UTC (ÑаÑÑиÑеннÑй ÑоÑÐ¼Ð°Ñ ISO 8601) |
-800 | ÑмеÑение ÑаÑового поÑÑа PST Ð¾Ñ UTC (ÑÑандаÑÑнÑй ÑоÑÐ¼Ð°Ñ ISO 8601) |
-8 | ÑмеÑение ÑаÑового поÑÑа PST Ð¾Ñ UTC (ÑÑандаÑÑнÑй ÑоÑÐ¼Ð°Ñ ISO 8601) |
zulu | пÑинÑÑое Ñ Ð²Ð¾ÐµÐ½Ð½ÑÑ ÑокÑаÑение UTC |
z | кÑаÑÐºÐ°Ñ ÑоÑма zulu (Ñакже опÑеделена в ISO 8601) |
ÐодÑобнее ÑзнаÑÑ Ð¾ Ñом, как ÑказÑваеÑÑÑ ÑаÑовой поÑÑ, можно в ÐодÑазделе 8.5.3.
8.5.1.3. ÐаÑÑ Ð¸ вÑÐµÐ¼Ñ #
ÐопÑÑÑимÑе знаÑÐµÐ½Ð¸Ñ Ñипов timestamp ÑоÑÑоÑÑ Ð¸Ð· запиÑи даÑÑ Ð¸ вÑемени, поÑле коÑоÑого Ð¼Ð¾Ð¶ÐµÑ ÑказÑваÑÑÑÑ ÑаÑовой поÑÑ Ð¸ необÑзаÑелÑное ÑÑоÑнение BC или AD, опÑеделÑÑÑее ÑпоÑ
Ñ Ð´Ð¾ наÑей ÑÑÑ Ð¸ наÑÑ ÑÑÑ ÑооÑвеÑÑÑвенно. (BC/AD можно ÑказаÑÑ Ð¸ пеÑед ÑаÑовÑм поÑÑом, но пÑедпоÑÑиÑелÑнее пеÑвÑй ваÑианÑ.) Таким обÑазом:
1999-01-08 04:05:06
и
1999-01-08 04:05:06 -8:00
допÑÑÑимÑе ваÑианÑÑ, ÑооÑвеÑÑÑвÑÑÑие ÑÑандаÑÑÑ ISO 8601. Рдополнение к ÑÑÐ¾Ð¼Ñ Ð¿Ð¾Ð´Ð´ÐµÑживаеÑÑÑ ÑаÑпÑоÑÑÑанÑннÑй ÑоÑмаÑ:
January 8 04:05:06 1999 PST
СÑандаÑÑ SQL ÑазлиÑÐ°ÐµÑ ÐºÐ¾Ð½ÑÑанÑÑ Ñипов timestamp without time zone и timestamp with time zone по Ð·Ð½Ð°ÐºÑ Â«+» или «-» и ÑмеÑÐµÐ½Ð¸Ñ ÑаÑового поÑÑа, Ð´Ð¾Ð±Ð°Ð²Ð»ÐµÐ½Ð½Ð¾Ð¼Ñ Ð¿Ð¾Ñле вÑемени. СледоваÑелÑно, ÑоглаÑно ÑÑандаÑÑÑ, запиÑи
TIMESTAMP '2004-10-19 10:23:54'
должен ÑооÑвеÑÑÑвоваÑÑ Ñип timestamp without time zone, а
TIMESTAMP '2004-10-19 10:23:54+02'
Ñип timestamp with time zone. Postgres Pro никогда не анализиÑÑÐµÑ ÑодеÑжимое ÑекÑÑовой ÑÑÑоки, ÑÑÐ¾Ð±Ñ Ð¾Ð¿ÑеделиÑÑ Ñип знаÑениÑ, и поÑÑÐ¾Ð¼Ñ Ð¾Ð±Ðµ запиÑи бÑдÑÑ Ð¾Ð±ÑабоÑÐ°Ð½Ñ ÐºÐ°Ðº знаÑÐµÐ½Ð¸Ñ Ñипа timestamp without time zone. ЧÑÐ¾Ð±Ñ ÑекÑÑÐ¾Ð²Ð°Ñ ÐºÐ¾Ð½ÑÑанÑа обÑабаÑÑвалаÑÑ ÐºÐ°Ðº timestamp with time zone, ÑкажиÑе ÑÑÐ¾Ñ Ñип Ñвно:
TIMESTAMP WITH TIME ZONE '2004-10-19 10:23:54+02'
РзнаÑении Ñипа timestamp without time zone Postgres Pro пÑоÑÑо игноÑиÑÑÐµÑ ÑаÑовой поÑÑ. То еÑÑÑ ÑезÑлÑÑиÑÑÑÑее знаÑение вÑÑиÑлÑеÑÑÑ ÑолÑко из полей даÑÑ/вÑемени и не подÑÑÑаиваеÑÑÑ Ð¿Ð¾Ð´ ÑказаннÑй ÑаÑовой поÑÑ.
ÐÐ»Ñ Ð·Ð½Ð°Ñений timestamp with time zone, вÑ
Ð¾Ð´Ð½Ð°Ñ ÑÑÑока, ÑодеÑжаÑÐ°Ñ Ñвное Ñказание ÑаÑового поÑÑа, бÑÐ´ÐµÑ Ð¿ÑеобÑазована в UTC (Universal Coordinated Time, ÐÑемиÑное кооÑдиниÑованное вÑемÑ) Ñ ÑÑÑÑом ÑмеÑÐµÐ½Ð¸Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ ÑаÑового поÑÑа. ÐÑли во вÑ
одной ÑÑÑоке не Ñказан ÑаÑовой поÑÑ, подÑазÑмеваеÑÑÑ ÑаÑовой поÑÑ, заданнÑй ÑиÑÑемнÑм паÑамеÑÑом TimeZone и вÑÐµÐ¼Ñ Ñак же пеÑеÑÑиÑÑваеÑÑÑ Ð² UTC Ñо ÑмеÑением timezone. РобоиÑ
ÑлÑÑаÑÑ
знаÑение Ñ
ÑаниÑÑÑ Ð²Ð½ÑÑÑи ÑиÑÑÐµÐ¼Ñ ÐºÐ°Ðº UTC, а изнаÑалÑно ÑказаннÑй или пÑедполагаемÑй ÑаÑовой поÑÑ Ð½Ðµ ÑоÑ
ÑанÑеÑÑÑ.
Ðогда знаÑение timestamp with time zone вÑводиÑÑÑ, оно вÑегда пÑеобÑазÑеÑÑÑ Ð¸Ð· UTC в ÑекÑÑий ÑаÑовой поÑÑ timezone и оÑобÑажаеÑÑÑ ÐºÐ°Ðº локалÑное вÑемÑ. ЧÑÐ¾Ð±Ñ Ð¿Ð¾Ð»ÑÑиÑÑ Ð²ÑÐµÐ¼Ñ Ð´Ð»Ñ Ð´ÑÑгого ÑаÑового поÑÑа, нÑжно либо измениÑÑ timezone, либо воÑполÑзоваÑÑÑÑ ÐºÐ¾Ð½ÑÑÑÑкÑией AT TIME ZONE (Ñм. ÐодÑаздел 9.9.4).
РпÑеобÑазованиÑÑ
Ð¼ÐµÐ¶Ð´Ñ timestamp without time zone и timestamp with time zone обÑÑно пÑедполагаеÑÑÑ, ÑÑо знаÑение timestamp without time zone ÑодеÑÐ¶Ð¸Ñ Ð¼ÐµÑÑное вÑÐµÐ¼Ñ (Ð´Ð»Ñ ÑаÑового поÑÑа timezone). ÐÑÑгой ÑаÑовой поÑÑ Ð´Ð»Ñ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ задаÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ AT TIME ZONE.
8.5.1.4. СпеÑиалÑнÑе знаÑÐµÐ½Ð¸Ñ #
Postgres Pro Ð´Ð»Ñ ÑдобÑÑва поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ Ð½ÐµÑколÑко ÑпеÑиалÑнÑÑ
знаÑений даÑÑ/вÑемени, пеÑеÑиÑленнÑÑ
в ТаблиÑе 8.13. ÐнаÑÐµÐ½Ð¸Ñ infinity и -infinity имеÑÑ Ð¾Ñобое пÑедÑÑавление в ÑиÑÑеме и они оÑобÑажаÑÑÑÑ Ð² Ñом же виде, Ñогда как дÑÑгие ваÑианÑÑ Ð¿Ñи ÑÑении пÑеобÑазÑÑÑÑÑ Ð² знаÑÐµÐ½Ð¸Ñ Ð´Ð°ÑÑ/вÑемени. (Ð ÑаÑÑноÑÑи, now и подобнÑе ÑÑÑоки пÑеобÑазÑÑÑÑÑ Ð² акÑÑалÑнÑе знаÑÐµÐ½Ð¸Ñ Ð²Ñемени в Ð¼Ð¾Ð¼ÐµÐ½Ñ ÑÑениÑ.) ЧÑÐ¾Ð±Ñ Ð¸ÑполÑзоваÑÑ ÑÑи знаÑÐµÐ½Ð¸Ñ Ð² каÑеÑÑве конÑÑÐ°Ð½Ñ Ð² командаÑ
SQL, иÑ
нÑжно заклÑÑаÑÑ Ð² апоÑÑÑоÑÑ.
ТаблиÑа 8.13. СпеÑиалÑнÑе знаÑÐµÐ½Ð¸Ñ Ð´Ð°ÑÑ/вÑемени
| ÐÐ²Ð¾Ð´Ð¸Ð¼Ð°Ñ ÑÑÑока | ÐопÑÑÑимÑе ÑÐ¸Ð¿Ñ | ÐпиÑание |
|---|---|---|
epoch | date, timestamp | 1970-01-01 00:00:00+00 (ÑоÑка оÑÑÑÑÑа вÑемени в Unix) |
infinity | date, timestamp | вÑÐµÐ¼Ñ Ð¿Ð¾Ñле макÑималÑной допÑÑÑимой даÑÑ |
-infinity | date, timestamp | вÑÐµÐ¼Ñ Ð´Ð¾ минималÑной допÑÑÑимой даÑÑ |
now | date, time, timestamp | вÑÐµÐ¼Ñ Ð½Ð°Ñала ÑекÑÑей ÑÑанзакÑии |
today | date, timestamp | вÑÐµÐ¼Ñ Ð½Ð°Ñала ÑекÑÑиÑ
ÑÑÑок (00:00) |
tomorrow | date, timestamp | вÑÐµÐ¼Ñ Ð½Ð°Ñала ÑледÑÑÑиÑ
ÑÑÑок (00:00) |
yesterday | date, timestamp | вÑÐµÐ¼Ñ Ð½Ð°Ñала пÑедÑдÑÑиÑ
ÑÑÑок (00:00) |
allballs | time | 00:00:00.00 UTC |
ÐÐ»Ñ Ð¿Ð¾Ð»ÑÑÐµÐ½Ð¸Ñ ÑекÑÑей даÑÑ/вÑемени ÑооÑвеÑÑÑвÑÑÑего Ñипа можно Ñакже иÑполÑзоваÑÑ ÑледÑÑÑие SQL-ÑовмеÑÑимÑе ÑÑнкÑии: CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, LOCALTIME и LOCALTIMESTAMP. (См. ÐодÑаздел 9.9.5.) ÐамеÑÑÑе, ÑÑо во вÑ
однÑÑ
ÑÑÑокаÑ
ÑÑи SQL-ÑÑнкÑии не ÑаÑпознаÑÑÑÑ.
Ðнимание
ÐÑ
однÑе знаÑÐµÐ½Ð¸Ñ now, today, tomorrow и yesterday вполне коÑÑекÑно ÑабоÑаÑÑ Ð² инÑеÑакÑивнÑÑ
SQL-командаÑ
, но когда ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ ÑоÑ
ÑанÑÑÑÑÑ Ð´Ð»Ñ Ð¿Ð¾ÑледÑÑÑего вÑполнениÑ, напÑÐ¸Ð¼ÐµÑ Ð² подгоÑовленнÑÑ
опеÑаÑоÑаÑ
, пÑедÑÑавлениÑÑ
или опÑеделениÑÑ
ÑÑнкÑий, иÑ
поведение Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ð½ÐµÐ¾Ð¶Ð¸Ð´Ð°Ð½Ð½Ñм. Ð¢Ð°ÐºÐ°Ñ ÑÑÑока Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑеобÑазоваÑÑÑÑ Ð² конкÑеÑное знаÑение вÑемени, коÑоÑое заÑем бÑÐ´ÐµÑ Ð¸ÑполÑзоваÑÑÑÑ Ð³Ð¾Ñаздо позже моменÑа, когда оно бÑло полÑÑено. Ð ÑакиÑ
ÑлÑÑаÑÑ
ÑледÑÐµÑ Ð¸ÑполÑзоваÑÑ Ð¾Ð´Ð½Ñ Ð¸Ð· SQL-ÑÑнкÑий. ÐапÑимеÑ, CURRENT_DATE + 1 бÑÐ´ÐµÑ ÑабоÑаÑÑ Ð½Ð°Ð´Ñжнее, Ñем 'tomorrow'::date.
8.5.2. ÐÑвод даÑÑ/вÑемени #
РкаÑеÑÑве вÑÑ
одного ÑоÑмаÑа Ñипов даÑÑ/вÑемени можно иÑполÑзоваÑÑ Ð¾Ð´Ð¸Ð½ из ÑеÑÑÑÑÑ
ÑÑилей: ISO 8601, SQL (Ingres), ÑÑадиÑионнÑй ÑоÑÐ¼Ð°Ñ POSTGRES (ÑоÑÐ¼Ð°Ñ date в Unix) или German. Ðо ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÑбÑан ÑоÑÐ¼Ð°Ñ ISO. (СÑандаÑÑ SQL ÑÑебÑеÑ, ÑÑÐ¾Ð±Ñ Ð¸ÑполÑзовалÑÑ Ð¸Ð¼ÐµÐ½Ð½Ð¾ ISO 8601. ÐÑÑгой ÑоÑÐ¼Ð°Ñ Ð½Ð°Ð·ÑваеÑÑÑ Â«SQL» иÑклÑÑиÑелÑно по иÑÑоÑиÑеÑким пÑиÑинам.) ÐÑимеÑÑ Ð²ÑеÑ
ÑÑилей вÑвода пеÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 8.14. ÐообÑе Ñо знаÑениÑми Ñипов date и time вÑводилаÑÑ Ð±Ñ ÑолÑко ÑаÑÑÑ Ð´Ð°ÑÑ Ð¸Ð»Ð¸ вÑемени из показаннÑÑ
пÑимеÑов, но Ñо ÑÑилем POSTGRES знаÑение даÑÑ Ð±ÐµÐ· вÑемени вÑводиÑÑÑ Ð² ÑоÑмаÑе ISO.
ТаблиÑа 8.14. СÑили вÑвода даÑÑ/вÑемÑ
| СÑÐ¸Ð»Ñ | ÐпиÑание | ÐÑÐ¸Ð¼ÐµÑ |
|---|---|---|
ISO | ISO 8601, ÑÑандаÑÑ SQL | 1997-12-17 07:37:16-08 |
SQL | ÑÑадиÑионнÑй ÑÑÐ¸Ð»Ñ | 12/17/1997 07:37:16.00 PST |
Postgres | изнаÑалÑнÑй ÑÑÐ¸Ð»Ñ | Wed Dec 17 07:37:16 1997 PST |
German | ÑегионалÑнÑй ÑÑÐ¸Ð»Ñ | 17.12.1997 07:37:16.00 PST |
ÐÑимеÑание
ISO 8601 ÑказÑваеÑ, ÑÑо даÑа должна оÑделÑÑÑÑÑ Ð¾Ñ Ð²Ñемени бÑквой T в веÑÑ
нем ÑегиÑÑÑе. Postgres Pro пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÑÐ¾Ñ ÑоÑÐ¼Ð°Ñ Ð¿Ñи вводе, но пÑи вÑводе вÑÑавлÑÐµÑ Ð²Ð¼ÐµÑÑо T пÑобел, как показано вÑÑе. ÐÑо Ñделано Ð´Ð»Ñ ÑлÑÑÑÐµÐ½Ð¸Ñ ÑиÑаемоÑÑи и Ð´Ð»Ñ ÑовмеÑÑимоÑÑи Ñ RFC 3339 и дÑÑгими СУÐÐ.
Ð ÑÑилÑÑ SQL и POSTGRES Ð´ÐµÐ½Ñ Ð²ÑводиÑÑÑ Ð¿ÐµÑед меÑÑÑем, еÑли ÑÑÑановлен поÑÑдок DMY, а в пÑоÑивном ÑлÑÑае меÑÑÑ Ð²ÑводиÑÑÑ Ð¿ÐµÑед днÑм. (Ðак ÑÑÐ¾Ñ Ð¿Ð°ÑамеÑÑ Ñакже влиÑÐµÑ Ð½Ð° инÑеÑпÑеÑаÑÐ¸Ñ Ð²Ñ Ð¾Ð´Ð½ÑÑ Ð·Ð½Ð°Ñений, опиÑано в ÐодÑазделе 8.5.1) СооÑвеÑÑÑвÑÑÑие пÑимеÑÑ Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð² ТаблиÑе 8.15.
ТаблиÑа 8.15. СоглаÑÐµÐ½Ð¸Ñ Ð¾ поÑÑдке компоненÑов даÑÑ
ÐаÑамеÑÑ datestyle | ÐоÑÑдок пÑи вводе | ÐÑÐ¸Ð¼ÐµÑ Ð²Ñвода |
|---|---|---|
SQL, DMY | денÑ/меÑÑÑ/год | 17/12/1997 15:37:16.00 CET |
SQL, MDY | меÑÑÑ/денÑ/год | 12/17/1997 07:37:16.00 PST |
Postgres, DMY | денÑ/меÑÑÑ/год | Wed 17 Dec 07:37:16 1997 PST |
Ð ÑоÑмаÑе ISO ÑаÑовой поÑÑ Ð²Ñегда оÑобÑажаеÑÑÑ Ð² виде ÑиÑлового ÑмеÑÐµÐ½Ð¸Ñ Ñо знаком оÑноÑиÑелÑно вÑемиÑного кооÑдиниÑованного вÑемени (UTC); Ð´Ð»Ñ Ð·Ð¾Ð½ к воÑÑÐ¾ÐºÑ Ð¾Ñ ÐÑинвиÑа знак ÑмеÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑй. СмеÑение бÑÐ´ÐµÑ Ð¾ÑобÑажаÑÑÑÑ ÐºÐ°Ðº hh (ÑолÑко ÑаÑÑ), еÑли оно задаÑÑÑÑ ÑелÑм ÑиÑлом ÑаÑов, как hh:mm, еÑли оно задаÑÑÑÑ ÑелÑм ÑиÑлом минÑÑ, или как hh:mm:ss. (ТÑеÑий ваÑÐ¸Ð°Ð½Ñ Ð½ÐµÐ²Ð¾Ð·Ð¼Ð¾Ð¶ÐµÐ½ в ÑовÑеменнÑÑ
ÑÑандаÑÑаÑ
ÑаÑовÑÑ
поÑÑов, но он Ð¼Ð¾Ð¶ÐµÑ Ð¿Ð¾Ð½Ð°Ð´Ð¾Ð±Ð¸ÑÑÑÑ Ð¿Ñи ÑабоÑе Ñ Ð¾ÑмеÑками вÑемени, пÑедÑеÑÑвÑÑÑими пÑинÑÑÐ¸Ñ ÑÑандаÑÑизиÑованнÑÑ
ÑаÑовÑÑ
поÑÑов.) РдÑÑгиÑ
ÑоÑмаÑаÑ
даÑÑ ÑаÑовой поÑÑ Ð¾ÑобÑажаеÑÑÑ ÐºÐ°Ðº бÑквенное ÑокÑаÑение, еÑли оно пÑинÑÑо в ÑекÑÑем поÑÑе. РпÑоÑивном ÑлÑÑае он оÑобÑажаеÑÑÑ ÐºÐ°Ðº ÑиÑловое ÑмеÑение Ñо знаком в ÑÑандаÑÑном ÑоÑмаÑе ISO 8601 (hh или hhmm).
СÑÐ¸Ð»Ñ Ð´Ð°ÑÑ/вÑемени полÑзоваÑÐµÐ»Ñ Ð¼Ð¾Ð¶ÐµÑ Ð²ÑбÑаÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ñ SET datestyle, паÑамеÑÑа DateStyle в Ñайле конÑигÑÑаÑии postgresql.conf или пеÑеменной окÑÑÐ¶ÐµÐ½Ð¸Ñ PGDATESTYLE на ÑеÑвеÑе или клиенÑе.
ÐÐ»Ñ Ð±Ð¾Ð»ÑÑей гибкоÑÑи пÑи ÑоÑмаÑиÑовании вÑводимой даÑÑ/вÑемени можно иÑполÑзоваÑÑ ÑÑнкÑÐ¸Ñ to_char (Ñм. Раздел 9.8).
8.5.3. ЧаÑовÑе поÑÑа #
ЧаÑовÑе поÑÑа и пÑавила Ð¸Ñ Ð¿ÑÐ¸Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ Ð¾Ð¿ÑеделÑÑÑÑÑ, как Ð²Ñ Ð·Ð½Ð°ÐµÑе, не ÑолÑко по геогÑаÑиÑеÑким, но и по полиÑиÑеÑким ÑообÑажениÑм. ЧаÑовÑе поÑÑа во вÑÑм миÑе бÑли более-менее ÑÑандаÑÑизиÑÐ¾Ð²Ð°Ð½Ñ Ð² наÑале пÑоÑлого века, но они пÑодолжаÑÑ Ð¿ÑеÑеÑпеваÑÑ Ð¸Ð·Ð¼ÐµÐ½ÐµÐ½Ð¸Ñ, в ÑаÑÑноÑÑи ÑÑо каÑаеÑÑÑ Ð¿ÐµÑÐµÑ Ð¾Ð´Ð° на леÑнее вÑемÑ. ÐÐ»Ñ ÑаÑÑÑÑа вÑемени в пÑоÑлом Postgres Pro полÑÑÐ°ÐµÑ Ð¸ÑÑоÑиÑеÑкие ÑÐ²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¾ пÑÐ°Ð²Ð¸Ð»Ð°Ñ ÑаÑовÑÑ Ð¿Ð¾ÑÑов из ÑаÑпÑоÑÑÑанÑнной Ð±Ð°Ð·Ñ Ð´Ð°Ð½Ð½ÑÑ IANA (Olson). ÐÐ»Ñ Ð±ÑдÑÑего вÑемени пÑедполагаеÑÑÑ, ÑÑо в заданном ÑаÑовом поÑÑе бÑдÑÑ Ð¿ÑодолжаÑÑ Ð´ÐµÐ¹ÑÑвоваÑÑ Ð¿Ð¾Ñледние пÑинÑÑÑе пÑавила.
Postgres Pro ÑÑÑемиÑÑÑ Ðº ÑовмеÑÑимоÑÑи Ñо ÑÑандаÑÑом SQL в наиболее ÑипиÑнÑÑ ÑлÑÑаÑÑ . Ðднако ÑÑандаÑÑ SQL допÑÑÐºÐ°ÐµÑ Ð½ÐµÐºÐ¾ÑоÑÑе ÑÑÑанноÑÑи пÑи ÑмеÑивании Ñипов даÑÑ Ð¸ вÑемени. Ðве оÑевиднÑе пÑоблемÑ:
ХоÑÑ Ð´Ð»Ñ Ñипа
dateÑаÑовой поÑÑ ÑказаÑÑ Ð½ÐµÐ»ÑзÑ, ÑÑо можно ÑделаÑÑ Ð´Ð»Ñ Ñипаtime. Ð ÑеалÑноÑÑи ÑÑо не оÑÐµÐ½Ñ Ð¿Ð¾Ð»ÐµÐ·Ð½Ð¾, Ñак как без даÑÑ Ð½ÐµÐ»ÑÐ·Ñ ÑоÑно опÑеделиÑÑ ÑмеÑение пÑи пеÑÐµÑ Ð¾Ð´Ðµ на леÑнее вÑемÑ.Ðо ÑмолÑÐ°Ð½Ð¸Ñ ÑаÑовой поÑÑ Ð·Ð°Ð´Ð°ÑÑÑÑ Ð¿Ð¾ÑÑоÑннÑм ÑмеÑением Ð¾Ñ UTC. ÐÑо Ñакже не позволÑÐµÑ ÑÑеÑÑÑ Ð»ÐµÑнее вÑÐµÐ¼Ñ Ð¿Ñи аÑиÑмеÑиÑеÑÐºÐ¸Ñ Ð¾Ð¿ÐµÑаÑий Ñ Ð´Ð°Ñами, пеÑеÑекаÑÑими гÑаниÑÑ Ð»ÐµÑнего вÑемени.
ÐоÑÑÐ¾Ð¼Ñ Ð¼Ñ ÑовеÑÑем иÑполÑзоваÑÑ ÑаÑовой поÑÑ Ñ Ñипами, вклÑÑаÑÑими и вÑемÑ, и даÑÑ. ÐÑ Ð½Ðµ ÑекомендÑем иÑполÑзоваÑÑ Ñип time with time zone (Ñ
оÑÑ Postgres Pro поддеÑÐ¶Ð¸Ð²Ð°ÐµÑ ÐµÐ³Ð¾ Ð´Ð»Ñ ÑÑаÑÑÑ
пÑиложений и ÑовмеÑÑимоÑÑи Ñо ÑÑандаÑÑом SQL). ÐÐ»Ñ Ñипов, вклÑÑаÑÑиÑ
ÑолÑко даÑÑ Ð¸Ð»Ð¸ ÑолÑко вÑемÑ, в Postgres Pro пÑедполагаеÑÑÑ Ð¼ÐµÑÑнÑй ÑаÑовой поÑÑ.
ÐÑе знаÑÐµÐ½Ð¸Ñ Ð´Ð°ÑÑ Ð¸ вÑемени Ñ ÑаÑовÑм поÑÑом пÑедÑÑавлÑÑÑÑÑ Ð²Ð½ÑÑÑи в UTC, а пÑи пеÑедаÑе клиенÑÑÐºÐ¾Ð¼Ñ Ð¿ÑÐ¸Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¾Ð½Ð¸ пеÑеводÑÑÑÑ Ð² меÑÑное вÑемÑ, пÑи ÑÑом ÑаÑовой поÑÑ Ð¿Ð¾ ÑмолÑÐ°Ð½Ð¸Ñ Ð¾Ð¿ÑеделÑеÑÑÑ Ð¿Ð°ÑамеÑÑом конÑигÑÑаÑии TimeZone.
Postgres Pro позволÑÐµÑ Ð·Ð°Ð´Ð°ÑÑ ÑаÑовой поÑÑ ÑÑÐµÐ¼Ñ ÑпоÑобами:
Ðолное название ÑаÑового поÑÑа, напÑимеÑ
America/New_York. ÐÑе допÑÑÑимÑе Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ñ Ð¿ÐµÑеÑиÑÐ»ÐµÐ½Ñ Ð² пÑедÑÑавленииpg_timezone_names(Ñм. Раздел 53.35). ÐпÑÐµÐ´ÐµÐ»ÐµÐ½Ð¸Ñ ÑаÑовÑÑ Ð¿Ð¾ÑÑов Postgres Pro беÑÑÑ Ð¸Ð· ÑиÑоко ÑаÑпÑоÑÑÑанÑнной Ð±Ð°Ð·Ñ IANA, Ñак ÑÑо имена ÑаÑовÑÑ Ð¿Ð¾ÑÑов Postgres Pro бÑдÑÑ Ð²Ð¾ÑпÑинимаÑÑ Ð¸ дÑÑгие пÑиложениÑ.ÐббÑевиаÑÑÑа ÑаÑового поÑÑа, напÑимеÑ
PST. Такое опÑеделение пÑоÑÑо задаÑÑ ÑмеÑение Ð¾Ñ UTC, в оÑлиÑие Ð¾Ñ Ð¿Ð¾Ð»Ð½ÑÑ Ð½Ð°Ð·Ð²Ð°Ð½Ð¸Ð¹ поÑÑов, коÑоÑÑе кÑоме Ñого подÑазÑмеваÑÑ Ð¸ пÑавила пеÑÐµÑ Ð¾Ð´Ð° на леÑнее вÑемÑ. РаÑпознаваемÑе аббÑевиаÑÑÑÑ Ð¿ÐµÑеÑиÑÐ»ÐµÐ½Ñ Ð² пÑедÑÑавленииpg_timezone_abbrevs(Ñм. Раздел 53.34). ÐббÑевиаÑÑÑÑ Ð¼Ð¾Ð¶Ð½Ð¾ иÑполÑзоваÑÑ Ð²Ð¾ вводимÑÑ Ð·Ð½Ð°ÑениÑÑ Ð´Ð°ÑÑ/вÑемени и в опеÑаÑоÑеAT TIME ZONE, но не в паÑамеÑÑÐ°Ñ ÐºÐ¾Ð½ÑигÑÑаÑии TimeZone и log_timezone.Ðомимо аббÑевиаÑÑÑ Ð¸ названий ÑаÑовÑÑ Ð¿Ð¾ÑÑов Postgres Pro пÑÐ¸Ð½Ð¸Ð¼Ð°ÐµÑ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ ÑаÑовÑÑ Ð¿Ð¾ÑÑов в ÑÑиле POSIX, как опиÑано в Разделе B.5. ÐÑÐ¾Ñ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Ð¾Ð±ÑÑно менее пÑедпоÑÑиÑелен, Ñем иÑполÑзование именованного ÑаÑового поÑÑа, но он Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ ÐµÐ´Ð¸Ð½ÑÑвеннÑм возможнÑм, еÑли Ð´Ð»Ñ Ð½Ñжного ÑаÑового поÑÑа Ð½ÐµÑ Ð·Ð°Ð¿Ð¸Ñи в базе даннÑÑ IANA.
ÐкÑаÑÑе, ÑазлиÑие Ð¼ÐµÐ¶Ð´Ñ Ð°Ð±Ð±ÑевиаÑÑÑами и полнÑми названиÑми заклÑÑаÑÑÑÑ Ð² ÑледÑÑÑем: аббÑевиаÑÑÑÑ Ð¿ÑедÑÑавлÑÑÑ Ð¾Ð¿ÑеделÑннÑй Ñдвиг Ð¾Ñ UTC, а полное название подÑазÑÐ¼ÐµÐ²Ð°ÐµÑ ÐµÑÑ Ð¸ меÑÑное пÑавило по пеÑеÑ
Ð¾Ð´Ñ Ð½Ð° леÑнее вÑемÑ, Ñо еÑÑÑ, возможно, два Ñдвига Ð¾Ñ UTC. ÐапÑимеÑ, 2014-06-04 12:00 America/New_York пÑедÑÑавлÑÐµÑ Ð¿Ð¾Ð»Ð´ÐµÐ½Ñ Ð¿Ð¾ меÑÑÐ½Ð¾Ð¼Ñ Ð²Ñемени в ÐÑÑ-ÐоÑк, ÑÑо Ð´Ð»Ñ Ð´Ð°Ð½Ð½Ð¾Ð³Ð¾ Ð´Ð½Ñ Ð±Ñло Ð±Ñ Ð»ÐµÑним воÑÑоÑнÑм вÑеменем (EDT или UTC-4). Так ÑÑо 2014-06-04 12:00 EDT обознаÑÐ°ÐµÑ ÑÐ¾Ñ Ð¶Ðµ Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ñемени. Ðо 2014-06-04 12:00 EST задаÑÑ ÑÑандаÑÑное воÑÑоÑное вÑÐµÐ¼Ñ (UTC-5), не завиÑÑÑее о Ñого, дейÑÑвовало ли леÑнее вÑÐµÐ¼Ñ Ð² ÑÑÐ¾Ñ Ð´ÐµÐ½Ñ.
Ðало Ñого, в некоÑоÑÑÑ
ÑÑиÑдикÑиÑÑ
одна и Ñа же аббÑевиаÑÑÑа ÑаÑового поÑÑа ознаÑала ÑазнÑе Ñдвиги UTC в Ñазное вÑемÑ; напÑимеÑ, аббÑевиаÑÑÑа моÑковÑкого вÑемени MSK неÑколÑко Ð»ÐµÑ Ð¾Ð·Ð½Ð°Ñала UTC+3, а заÑем ÑÑала ознаÑаÑÑ UTC+4. Postgres Pro обÑабаÑÑÐ²Ð°ÐµÑ Ñакие аббÑевиаÑÑÑÑ Ð² ÑооÑвеÑÑÑвии Ñ Ð¸Ñ
знаÑениÑми на заданнÑÑ Ð´Ð°ÑÑ, но, как и Ñ Ð¿ÑимеÑом вÑÑе EST, ÑÑо не обÑзаÑелÑно бÑÐ´ÐµÑ ÑооÑвеÑÑÑвоваÑÑ Ð¼ÐµÑÑÐ½Ð¾Ð¼Ñ Ð³ÑажданÑÐºÐ¾Ð¼Ñ Ð²Ñемени в ÑÑÐ¾Ñ Ð´ÐµÐ½Ñ.
ÐезавиÑимо Ð¾Ñ ÑоÑмÑ, ÑегиÑÑÑ Ð² названиÑÑ Ð¸ аббÑевиаÑÑÑÐ°Ñ ÑаÑовÑÑ Ð¿Ð¾ÑÑов не важен. (Ð PostgreSQL до веÑÑии 8.2 он где-Ñо имел знаÑение, а где-Ñо неÑ.)
Ðи названиÑ, ни аббÑевиаÑÑÑÑ ÑаÑовÑÑ
поÑÑов, не заÑиÑÑ Ð² Ñамом ÑеÑвеÑе; они ÑÑиÑÑваÑÑÑÑ Ð¸Ð· Ñайлов конÑигÑÑаÑии, наÑ
одÑÑиÑ
ÑÑ Ð² пÑÑÑÑ
.../share/timezone/ и .../share/timezonesets/ оÑноÑиÑелÑно каÑалога ÑÑÑановки (Ñм. Раздел B.4).
ÐаÑамеÑÑ ÐºÐ¾Ð½ÑигÑÑаÑии TimeZone можно ÑÑÑановиÑÑ Ð² postgresql.conf или лÑбÑм дÑÑгим ÑÑандаÑÑнÑм ÑпоÑобом, опиÑаннÑм в Ðлаве 18. ЧаÑовой поÑÑ Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ Ñакже опÑеделÑн ÑледÑÑÑими ÑпеÑиалÑнÑми ÑпоÑобами:
ЧаÑовой поÑÑ Ð´Ð»Ñ ÑекÑÑего ÑеанÑа можно ÑÑÑановиÑÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ SQL-командÑ
SET TIME ZONE. ÐÑо алÑÑеÑнаÑÐ¸Ð²Ð½Ð°Ñ Ð·Ð°Ð¿Ð¸ÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ÑSET TIMEZONE TO, более ÑооÑвеÑÑÑвÑÑÑÐ°Ñ SQL-ÑÑандаÑÑÑ.ÐÑли ÑÑÑановлена пеÑÐµÐ¼ÐµÐ½Ð½Ð°Ñ Ð¾ÐºÑÑжениÑ
PGTZ, клиенÑÑ libpq иÑполÑзÑÑÑ ÐµÑ Ð·Ð½Ð°Ñение, вÑполнÑÑ Ð¿Ñи подклÑÑении к ÑеÑвеÑÑ ÐºÐ¾Ð¼Ð°Ð½Ð´ÑSET TIME ZONE.
8.5.4. Ðвод инÑеÑвалов #
ÐнаÑÐµÐ½Ð¸Ñ Ñипа interval могÑÑ Ð±ÑÑÑ Ð·Ð°Ð¿Ð¸ÑÐ°Ð½Ñ Ð² ÑледÑÑÑей ÑаÑÑиÑенной ÑоÑме:
[@]колиÑеÑÑвоединиÑа[колиÑеÑÑвоединиÑа...] [напÑавление]
где колиÑеÑÑво â ÑÑо ÑиÑло (возможно, Ñо знаком); единиÑа â одно из знаÑений: microsecond, millisecond, second, minute, hour, day, week, month, year, decade, century, millennium (коÑоÑÑе обознаÑаÑÑ ÑооÑвеÑÑÑвенно микÑоÑекÑндÑ, миллиÑекÑндÑ, ÑекÑндÑ, минÑÑÑ, ÑаÑÑ, дни, недели, меÑÑÑÑ, годÑ, деÑÑÑилеÑиÑ, века и ÑÑÑÑÑелеÑиÑ), либо ÑÑи же Ñлова во множеÑÑвенном ÑиÑле, либо иÑ
ÑокÑаÑениÑ; напÑавление Ð¼Ð¾Ð¶ÐµÑ Ð¿ÑинимаÑÑ Ð·Ð½Ð°Ñение ago (назад) или бÑÑÑ Ð¿ÑÑÑÑм. Ðнак @ ÑвлÑеÑÑÑ Ð½ÐµÐ¾Ð±ÑзаÑелÑнÑм. ÐÑе заданнÑе велиÑÐ¸Ð½Ñ ÑазлиÑнÑÑ
ÐµÐ´Ð¸Ð½Ð¸Ñ ÑÑммиÑÑÑÑÑÑ Ð²Ð¼ÐµÑÑе Ñ ÑÑÑÑом знака ÑиÑел. Указание ago менÑÐµÑ Ð·Ð½Ð°Ðº вÑеÑ
полей на пÑоÑивоположнÑй. ÐÑÐ¾Ñ ÑинÑакÑÐ¸Ñ Ñакже иÑполÑзÑеÑÑÑ Ð¿Ñи вÑводе инÑеÑвала, еÑли паÑамеÑÑ IntervalStyle Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение postgres_verbose.
ÐолиÑеÑÑва дней, ÑаÑов, минÑÑ Ð¸ ÑекÑнд можно опÑеделиÑÑ, не ÑказÑÐ²Ð°Ñ Ñвно ÑооÑвеÑÑÑвÑÑÑие единиÑÑ. ÐапÑимеÑ, запиÑÑ '1 12:59:10' ÑавнознаÑна '1 day 12 hours 59 min 10 sec'. СоÑеÑание года и меÑÑÑа Ñакже можно запиÑаÑÑ ÑеÑез минÑÑ; напÑÐ¸Ð¼ÐµÑ '200-10' ознаÑÐ°ÐµÑ Ñо, же ÑÑо и '200 years 10 months'. (Ðа Ñамом деле ÑолÑко ÑÑи кÑаÑкие ÑоÑÐ¼Ñ ÑазÑеÑÐµÐ½Ñ ÑÑандаÑÑом SQL и они иÑполÑзÑÑÑÑÑ Ð¿Ñи вÑводе, когда IntervalStyle Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение sql_standard.)
ÐнÑеÑÐ²Ð°Ð»Ñ Ð¼Ð¾Ð¶Ð½Ð¾ Ñакже запиÑÑваÑÑ Ð² виде, опÑеделÑнном в ISO 8601, либо в «ÑоÑмаÑе Ñ ÐºÐ¾Ð´Ð°Ð¼Ð¸Â», опиÑанном в Ñазделе 4.4.3.2 ÑÑого ÑÑандаÑÑа, либо в «алÑÑеÑнаÑивном ÑоÑмаÑе», опиÑанном в Ñазделе 4.4.3.3. ФоÑÐ¼Ð°Ñ Ñ ÐºÐ¾Ð´Ð°Ð¼Ð¸ вÑглÑÐ´Ð¸Ñ Ñак:
PколиÑеÑÑвоединиÑа[колиÑеÑÑвоединиÑа...] [ T [колиÑеÑÑвоединиÑа...]]
СÑÑока должна наÑинаÑÑÑÑ Ñ Ñимвола P и Ð¼Ð¾Ð¶ÐµÑ Ð²ÐºÐ»ÑÑаÑÑ Ñакже T пеÑед вÑеменем ÑÑÑок. ÐопÑÑÑимÑе ÐºÐ¾Ð´Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ Ð¿ÐµÑеÑиÑÐ»ÐµÐ½Ñ Ð² ТаблиÑе 8.16. ÐÐ¾Ð´Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ Ð¼Ð¾Ð¶Ð½Ð¾ опÑÑÑиÑÑ Ð¸Ð»Ð¸ ÑказаÑÑ Ð² лÑбом поÑÑдке, но компоненÑÑ Ð²Ñемени ÑÑÑок Ð´Ð¾Ð»Ð¶Ð½Ñ Ð¸Ð´Ñи поÑле Ñимвола T. Ð ÑаÑÑноÑÑи, знаÑение кода M завиÑÐ¸Ñ Ð¾Ñ Ñого, ÑаÑполагаеÑÑÑ Ð»Ð¸ он до или поÑле T.
ТаблиÑа 8.16. ÐÐ¾Ð´Ñ ÐµÐ´Ð¸Ð½Ð¸Ñ Ð²ÑеменнÑÑ Ð¸Ð½ÑеÑвалов ISO 8601
| Ðод | ÐнаÑение |
|---|---|
| Y | Ð³Ð¾Ð´Ñ |
| M | меÑÑÑÑ (в даÑе) |
| W | недели |
| D | дни |
| H | ÑаÑÑ |
| M | минÑÑÑ (во вÑемени) |
| S | ÑекÑÐ½Ð´Ñ |
РалÑÑеÑнаÑивном ÑоÑмаÑе:
P [год-меÑÑÑ-денÑ] [ TÑаÑÑ:минÑÑÑ:ÑекÑндÑ]
ÑÑÑока должна наÑинаÑÑÑÑ Ñ P, а T ÑазделÑÐµÑ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½ÑÑ Ð´Ð°ÑÑ Ð¸ вÑемени. ÐнаÑÐµÐ½Ð¸Ñ Ð²ÑÑажаÑÑÑÑ ÑиÑлами Ñак же, как и в даÑаÑ
ISO 8601.
ÐÑи запиÑи инÑеÑвалÑной конÑÑанÑÑ Ñ Ñказанием полей или пÑиÑваивании ÑÑолбÑÑ Ñипа interval ÑÑÑоки Ñ Ð¿Ð¾Ð»Ñми, инÑеÑпÑеÑаÑÐ¸Ñ Ð½ÐµÐ¿Ð¾Ð¼ÐµÑеннÑÑ
велиÑин завиÑÐ¸Ñ Ð¾Ñ Ð¿Ð¾Ð»ÐµÐ¹. ÐапÑимеÑ, INTERVAL '1' YEAR воÑпÑинимаеÑÑÑ ÐºÐ°Ðº 1 год, а INTERVAL '1' â как 1 ÑекÑнда. ÐÑоме Ñого, знаÑÐµÐ½Ð¸Ñ Â«ÑпÑава» Ð¾Ñ Ð¼ÐµÐ½ÑÑего знаÑаÑего полÑ, заданного в опÑеделении полей, пÑоÑÑо оÑбÑаÑÑваÑÑÑÑ. ÐапÑимеÑ, в запиÑи INTERVAL '1 day 2:03:04' HOUR TO MINUTE бÑдÑÑ Ð¾ÑбÑоÑÐµÐ½Ñ ÑекÑндÑ, но не денÑ.
СоглаÑно ÑÑандаÑÑÑ SQL, вÑе компоненÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ interval Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ знака, и ведÑÑий минÑÑ Ð¿ÑименÑеÑÑÑ ÐºÐ¾ вÑем компоненÑам; напÑимеÑ, минÑÑ Ð² запиÑи '-1 2:03:04' пÑименÑеÑÑÑ Ð¸ к днÑ, и к ÑаÑам/минÑÑам/ÑекÑндам. Postgres Pro позволÑÐµÑ Ð·Ð°Ð´Ð°Ð²Ð°ÑÑ Ð´Ð»Ñ ÑазнÑÑ
компоненÑов ÑазнÑе знаки и ÑÑадиÑионно обÑабаÑÑÐ²Ð°ÐµÑ Ð·Ð½Ð°Ðº каждого компоненÑа в ÑекÑÑовом пÑедÑÑавлении оÑделÑно Ð¾Ñ Ð´ÑÑгиÑ
, Ñак ÑÑо в данном ÑлÑÑае ÑаÑÑ/минÑÑÑ/ÑекÑÐ½Ð´Ñ Ð±ÑдÑÑ ÑÑиÑаÑÑÑÑ Ð¿Ð¾Ð»Ð¾Ð¶Ð¸ÑелÑнÑми. ÐÑли паÑамеÑÑ IntervalStyle Ð¸Ð¼ÐµÐµÑ Ð·Ð½Ð°Ñение sql_standard, ведÑÑий знак пÑименÑеÑÑÑ ÐºÐ¾ вÑем компоненÑам (но ÑолÑко еÑли они не ÑодеÑÐ¶Ð°Ñ Ð·Ð½Ð°ÐºÐ¸ Ñвно). РпÑоÑивном ÑлÑÑае дейÑÑвÑÑÑ ÑÑадиÑионнÑе пÑавила Postgres Pro. Ðо избежание неоднознаÑноÑÑи ÑекомендÑеÑÑÑ Ð´Ð¾Ð±Ð°Ð²Ð»ÑÑÑ Ð·Ð½Ð°Ðº к ÐºÐ°Ð¶Ð´Ð¾Ð¼Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½ÑÑ Ñ Ð¾ÑÑиÑаÑелÑнÑм знаÑением.
ÐнаÑÐµÐ½Ð¸Ñ interval Ñ
ÑанÑÑÑÑ Ð² виде ÑÑÑÑ
ÑелоÑиÑленнÑÑ
полей: меÑÑÑÑ, дни и микÑоÑекÑндÑ. ÐÑи Ð¿Ð¾Ð»Ñ Ñ
ÑанÑÑÑÑ Ð¾ÑделÑно, поÑколÑÐºÑ ÐºÐ¾Ð»Ð¸ÑеÑÑво дней в меÑÑÑе ваÑÑиÑÑеÑÑÑ, а Ð´ÐµÐ½Ñ Ð¼Ð¾Ð¶ÐµÑ ÑоÑÑоÑÑÑ Ð¸Ð· 23 или 25 ÑаÑов пÑи пеÑеÑ
оде на леÑнее/зимнее вÑемÑ. ÐÑ
Ð¾Ð´Ð½Ð°Ñ ÑÑÑока инÑеÑвала, в коÑоÑой иÑполÑзÑÑÑÑÑ Ð´ÑÑгие единиÑÑ Ð¸Ð·Ð¼ÐµÑениÑ, ноÑмализÑеÑÑÑ Ð² ÑÑÐ¾Ñ ÑоÑмаÑ, а заÑем ÑÑандаÑÑизиÑованнÑм обÑазом ÑеконÑÑÑÑиÑÑеÑÑÑ Ð´Ð»Ñ Ð²Ñвода, напÑимеÑ:
SELECT '2 years 15 months 100 weeks 99 hours 123456789 milliseconds'::interval;
interval
---------------------------------------
3 years 3 mons 700 days 133:17:36.789ÐдеÑÑ Ð½ÐµÐ´ÐµÐ»Ð¸, под коÑоÑÑми понимаÑÑÑÑ Â«7 дней», бÑли ÑÐ¾Ñ ÑÐ°Ð½ÐµÐ½Ñ Ð¾ÑделÑно, а менÑÑие и болÑÑие единиÑÑ Ð¸Ð·Ð¼ÐµÑÐµÐ½Ð¸Ñ Ð²Ñемени бÑли обÑÐµÐ´Ð¸Ð½ÐµÐ½Ñ Ð¸ ноÑмализованÑ.
ÐнаÑÐµÐ½Ð¸Ñ Ð¿Ð¾Ð»ÐµÐ¹ могÑÑ ÑодеÑжаÑÑ Ð´ÑобнÑÑ ÑаÑÑÑ, напÑÐ¸Ð¼ÐµÑ '1.5 weeks' или '01:02:03.45'. Ðднако поÑколÑÐºÑ interval ÑодеÑÐ¶Ð¸Ñ ÑолÑко ÑелÑе единиÑÑ, дÑобнÑе знаÑÐµÐ½Ð¸Ñ Ð´Ð¾Ð»Ð¶Ð½Ñ Ð±ÑÑÑ Ð¿ÑеобÑÐ°Ð·Ð¾Ð²Ð°Ð½Ñ Ð² более мелкие единиÑÑ. ÐÑобнÑе ÑаÑÑи единиÑ, пÑевÑÑаÑÑиÑ
меÑÑÑÑ, окÑÑглÑÑÑÑÑ Ð´Ð¾ Ñелого ÑиÑла меÑÑÑев, напÑÐ¸Ð¼ÐµÑ '1.5 years' пÑеобÑазÑеÑÑÑ Ð² '1 year 6 mons'. ÐÑобнÑе ÑаÑÑи Ð½ÐµÐ´ÐµÐ»Ñ Ð¸ дней пеÑеÑÑиÑÑваÑÑÑÑ Ð² Ñелое ÑиÑло дней и микÑоÑекÑнд, из ÑаÑÑÑÑа, ÑÑо в меÑÑÑе 30 дней, а в ÑÑÑкаÑ
â 24 ÑаÑа, напÑимеÑ, '1.75 months' ÑÑановиÑÑÑ 1 mon 22 days 12:00:00. Ðа вÑÑ
оде ÑолÑко ÑекÑÐ½Ð´Ñ Ð¼Ð¾Ð³ÑÑ Ð¸Ð¼ÐµÑÑ Ð´ÑобнÑÑ ÑаÑÑÑ.
РТаблиÑе 8.17 показано неÑколÑко пÑимеÑов допÑÑÑимÑÑ
вводимÑÑ
знаÑений Ñипа interval.
ТаблиÑа 8.17. Ðвод инÑеÑвалов
| ÐÑÐ¸Ð¼ÐµÑ | ÐпиÑание |
|---|---|
1-2 | СÑандаÑÑнÑй ÑоÑÐ¼Ð°Ñ SQL: 1 год и 2 меÑÑÑа |
3 4:05:06 | СÑандаÑÑнÑй ÑоÑÐ¼Ð°Ñ SQL: 3 Ð´Ð½Ñ 4 ÑаÑа 5 минÑÑ 6 ÑекÑнд |
1 year 2 months 3 days 4 hours 5 minutes 6 seconds | ТÑадиÑионнÑй ÑоÑÐ¼Ð°Ñ Postgres: 1 год 2 меÑÑÑа 3 Ð´Ð½Ñ 4 ÑаÑа 5 минÑÑ 6 ÑекÑнд |
P1Y2M3DT4H5M6S | «ФоÑÐ¼Ð°Ñ Ñ ÐºÐ¾Ð´Ð°Ð¼Ð¸Â» ISO 8601: Ñо же знаÑение, ÑÑо и вÑÑе |
P0001-02-03T04:05:06 | «ÐлÑÑеÑнаÑивнÑй ÑоÑмаÑ» ISO 8601: Ñо же знаÑение, ÑÑо и вÑÑе |
8.5.5. ÐÑвод инÑеÑвалов #
Ðак обÑÑÑнÑлоÑÑ Ñанее, PostgreSQL Ñ
ÑÐ°Ð½Ð¸Ñ Ð·Ð½Ð°ÑÐµÐ½Ð¸Ñ interval в виде меÑÑÑев, дней и микÑоÑекÑнд. ÐÑи вÑводе знаÑение меÑÑÑев пÑеобÑазÑеÑÑÑ Ð² Ð³Ð¾Ð´Ñ Ð¸ меÑÑÑÑ Ð¿ÑÑÑм Ð´ÐµÐ»ÐµÐ½Ð¸Ñ Ð½Ð° 12. ÐнаÑение в днÑÑ
оÑобÑажаеÑÑÑ ÐºÐ°Ðº еÑÑÑ. ÐнаÑение в микÑоÑекÑндаÑ
пÑеобÑазÑеÑÑÑ Ð² ÑаÑÑ, минÑÑÑ, ÑекÑÐ½Ð´Ñ Ð¸ доли ÑекÑндÑ. Таким обÑазом, меÑÑÑÑ, минÑÑÑ Ð¸ ÑекÑÐ½Ð´Ñ Ð½Ð¸ÐºÐ¾Ð³Ð´Ð° не бÑдÑÑ Ð²ÑводиÑÑÑÑ Ð²Ð½Ðµ диапазонов 0â11, 0â59 и 0â59 ÑооÑвеÑÑÑвенно, Ñогда как оÑобÑажаемÑе знаÑÐµÐ½Ð¸Ñ Ð² годаÑ
, днÑÑ
и ÑаÑаÑ
могÑÑ Ð±ÑÑÑ Ð´Ð¾Ð²Ð¾Ð»Ñно болÑÑими. (ЧÑÐ¾Ð±Ñ Ð¿ÐµÑенеÑÑи болÑÑие знаÑÐµÐ½Ð¸Ñ Ð´Ð½ÐµÐ¹ и ÑаÑов в ÑледÑÑÑее поле, можно иÑполÑзоваÑÑ ÑÑнкÑии justify_days и justify_hours.)
ФоÑÐ¼Ð°Ñ Ð²Ñвода Ñипа interval Ð¼Ð¾Ð¶ÐµÑ Ð¾Ð¿ÑеделÑÑÑÑÑ Ð¾Ð´Ð½Ð¸Ð¼ из ÑеÑÑÑÑÑ
ÑÑилей: sql_standard, postgres, postgres_verbose и iso_8601. ÐÑбÑаÑÑ Ð½ÑжнÑй ÑÑÐ¸Ð»Ñ Ð¿Ð¾Ð·Ð²Ð¾Ð»ÑÐµÑ ÐºÐ¾Ð¼Ð°Ð½Ð´Ð° SET intervalstyle (по ÑмолÑÐ°Ð½Ð¸Ñ Ð²ÑбÑан postgres). ÐÑимеÑÑ ÑоÑмаÑов ÑазнÑÑ
ÑÑилей Ð¿Ð¾ÐºÐ°Ð·Ð°Ð½Ñ Ð² ТаблиÑе 8.18.
СÑÐ¸Ð»Ñ sql_standard вÑдаÑÑ ÑезÑлÑÑаÑ, ÑооÑвеÑÑÑвÑÑÑий ÑÑандаÑÑÑ SQL, еÑли знаÑение инÑеÑвала ÑдовлеÑвоÑÑÐµÑ Ð¾Ð³ÑаниÑениÑм ÑÑандаÑÑа (и ÑодеÑÐ¶Ð¸Ñ Ð»Ð¸Ð±Ð¾ ÑолÑко год и меÑÑÑ, либо ÑолÑко Ð´ÐµÐ½Ñ Ð¸ вÑемÑ, и пÑи ÑÑом вÑе его компоненÑÑ Ð¾Ð´Ð½Ð¾Ð³Ð¾ знака). РпÑоÑивном ÑлÑÑае вÑводиÑÑÑ Ð³Ð¾Ð´-меÑÑÑ, за коÑоÑÑм идÑÑ Ð´Ð°Ñа-вÑемÑ, а в компоненÑÑ Ð´Ð»Ñ Ð¾Ð´Ð½Ð¾Ð·Ð½Ð°ÑноÑÑи Ñвно добавлÑÑÑÑÑ Ð·Ð½Ð°ÐºÐ¸.
ÐÑвод в ÑÑиле postgres ÑооÑвеÑÑÑвÑÐµÑ ÑоÑмаÑÑ, коÑоÑÑй бÑл пÑинÑÑ Ð² PostgreSQL до веÑÑии 8.4, когда паÑамеÑÑ DateStyle имел знаÑение ISO.
ÐÑвод в ÑÑиле postgres_verbose ÑооÑвеÑÑÑвÑÐµÑ ÑоÑмаÑÑ, коÑоÑÑй бÑл пÑинÑÑ Ð² PostgreSQL до веÑÑии 8.4, когда знаÑением паÑамеÑÑом DateStyle бÑло не ISO.
ÐÑвод в ÑÑиле iso_8601 ÑооÑвеÑÑÑвÑÐµÑ Â«ÑоÑмаÑÑ Ñ ÐºÐ¾Ð´Ð°Ð¼Ð¸Â» опиÑÐ°Ð½Ð½Ð¾Ð¼Ñ Ð² Ñазделе 4.4.3.2 ÑоÑмаÑа ISO 8601.
ТаблиÑа 8.18. ÐÑимеÑÑ ÑÑилей вÑвода инÑеÑвалов
| СÑÐ¸Ð»Ñ | ÐнÑеÑвал год-меÑÑÑ | ÐнÑеÑвал денÑ-вÑÐµÐ¼Ñ | СмеÑаннÑй инÑеÑвал |
|---|---|---|---|
sql_standard | 1-2 | 3 4:05:06 | -1-2 +3 -4:05:06 |
postgres | 1 year 2 mons | 3 days 04:05:06 | -1 year -2 mons +3 days -04:05:06 |
postgres_verbose | @ 1 year 2 mons | @ 3 days 4 hours 5 mins 6 secs | @ 1 year 2 mons -3 days 4 hours 5 mins 6 secs ago |
iso_8601 | P1Y2M | P3DT4H5M6S | P-1Y-2M3DâT-4H-5M-6S |