| PostgreSQL | ||
|---|---|---|
| 上一頁 | 第三章. 數據型態 | 下一頁 |
表 3-7. Postgres 日期/時間
型態
| 型態 | 描述 | 儲存 | 最早 | 最晚 | 精度 |
|---|---|---|---|---|---|
| timestamp | 用於包含日期和時間的數據 | 8 bytes | 4713 BC | AD 1465001 | 1 microsec / 14 digits |
| interval | 用於時間間隔 | 12 bytes | -178000000 years | 178000000 years | 1 mircosecond |
| date | 用於只包含日期的數據 | 4 bytes | 4713 BC | 32767 AD | 1 day |
| time | 用於只包含時刻的數據 | 4 bytes | 00:00:00.00 | 23:59:59.99 | 1 microsecond |
注意:為了保証和早期 PostgreSQL 版本的兼容,我們還繼續提供 datetime(等效於timestamp)和timespan(等效於interval)。不過對這些型態的支援現在局限於進行一個隱含的轉換,轉換成timestamp 和 interval。型態abstime和 reltime 是低分辨率型態,它們被用於系統內部。我們不鼓勵你在新的應用裡面使用這些型態,同時我們支援合適的時候把舊應用中對應的型態轉換成目前上面指明的。因為這些舊型態的部分或全部在未來的版本裡可能消失。
參閱 日期/時間 支援 獲取關於日期/時間輸入的準確的分析規則和可識別的時區的資訊。
記住任何日期或者時間輸入需要被單引號包圍,就像一個文本字符串一樣。
表 3-8. PostgreSQL 日期輸入
| 例子 | 描述 |
|---|---|
| January 8, 1999 | 無模糊 |
| 1999-01-08 | ISO-8601 格式,建議方式 |
| 1/8/1999 | US﹔在 European 模式下讀做八月一日 |
| 8/1/1999 | European﹔在 US 模式下讀做八月一日 |
| 1/18/1999 | US﹔在任何模式下都讀做一月十八日 |
| 1999.008 | 年和年裡的第幾天 |
| 19990108 | ISO-8601 年,月,日 |
| 990108 | ISO-8601 年,月,日 |
| 1999.008 | 年和年裡的第幾天 |
| 99008 | 年和年裡的第幾天 |
| January 8, 99 BC | 公元前99年 |
表 3-9. PostgreSQL 月份縮寫
| 月份 | 縮寫 |
|---|---|
| April(四月) | Apr |
| August(八月) | Aug |
| December(十二月) | Dec |
| February(二月) | Feb |
| January(一月) | Jan |
| July(七月) | Jul |
| June(六月) | Jun |
| March(三月) | Mar |
| November(十一月) | Nov |
| October(十月) | Oct |
| September(九月) | Sep, Sept |
注意: 五月(May)沒有縮寫,原因是顯而易見的。表 3-10. PostgreSQL 星期縮寫
| 星期 | 縮寫 |
|---|---|
| Sunday(星期天) | Sun |
| Monday(星期一) | Mon |
| Tuesday(星期二) | Tue, Tues |
| Wednesday(星期三) | Wed, Weds |
| Thursday(星期四) | Thu, Thur, Thurs |
| Friday(星期五) | Fri |
| Saturday(星期六) | Sat |
表 3-11. PostgreSQL 時間輸入
| 例子 | 描述 |
|---|---|
| 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 |
| z | 與 00:00:00 一樣 |
| zulu | 與 00:00:00 一樣 |
| allballs | 與 00:00:00 一樣 |
帶時區時間 接受所有對 time 型態也合法的輸入,附加一個合法的時區,如下:
表 3-12. Postgres 帶時區時間輸入
| 例子 | 描述 |
|---|---|
| 04:05:06.789-8 | ISO-8601 |
| 04:05:06-08:00 | ISO-8601 |
| 04:05-08:00 | ISO-8601 |
| 040506-08 | ISO-8601 |
參考 Postgres 時區輸入 獲取時區的更多例子。
1999-01-08 04:05:06 -8:00是一個有效的 timestamp 值,它是 ISO-兼容的。另外,已經廣泛使用的格式
January 8 04:05:06 1999 PST也是支援的。
表 3-13. PostgreSQL 時區輸入
| 時區 | 描述 |
|---|---|
| PST | 太平洋標準時間(Pacific Standard Time) |
| -8:00 | ISO-8601 與 PST 的偏移 |
| -800 | ISO-8601 與 PST 的偏移 |
| -8 | ISO-8601 與 PST 的偏移 |
Quantity Unit [Quantity Unit...] [Direction] @ Quantity Unit [Direction]這裡:Quantity 是 ...,-1,0,1,2,...﹔Unit 是 second,minute,hour,day,week,month,year,decade,century,millenium,或者這些單位的縮寫或復數﹔Direction 可以是 ago 或者為空。
PostgreSQL 為方便期間同樣還支援幾個特殊常數。
表 3-14. PostgresSQL 日期/時間
特殊常數
| 常數 | 描述 |
|---|---|
| current | 當前事務時間, (使用時)deferred |
| epoch | 1970-01-01 00:00:00+00 (Unix 系統零時) |
| infinity | 比任何有效時間晚 |
| -infinity | 比任何有效時間早 |
| invalid | 非法輸入 |
| now | 當前事務時間 |
| today | 今日午夜 |
| tomorrow | 明日午夜 |
| yesterday | 昨日午夜 |
'now' 在該值被插入時解釋,'current' 在每次檢索該值時被解釋。所以你可能會在大多數應用裡使用 'now'。(當然你真的想用 CURRENT_TIMESTAMP 的話也行,它等效於 'now'。)
表 3-15. PostgreSQL 日期/時間
輸出風格
| 風格描述 | 描述 | 例子 |
|---|---|---|
| 'ISO' | ISO-8601 標準 | 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 |
日期和時間風格的輸出當然只是對應上面例子的日期或者時間部分。
SQL 風格有歐洲和非歐洲(US)變種, 決定月份後面是日期還是正相反。(參閱上面日期/時間輸入部分,看看這個設置是如何影響對輸入值的解釋。)
表 3-16. PostgreSQL 日期順序傳統
| 風格 | 描述 | 例子 |
|---|---|---|
| European | 日/月/年 | 17/12/1997 15:37:16.00 MET |
| US | 月/日/年 | 12/17/1997 07:37:16.00 PST |
interval 的輸出看起來像輸入格式,只是像 week 或 century 這樣的單位被轉換成年和日。在 ISO 模式下輸出看起來像
[ Quantity Units [ ... ] ] [ Days ] Hours:Minutes [ ago ]有幾種方法可以影響日期/時間型態的輸出:
為了克服這些困難, Postgres 只將日期和時間型態(同時包含日期和時間)與時區相關聯,並且假設任何型態的當地時間只包含日期或時間。另外,時區的支援從作業系統的時區功能中引入,這樣就可以處理夏時制或其他可知的因素。
Postgres 從作業系統獲得介於1902年和2038年的日期的時區支援(近乎是典型的Unix類系統的日期限制)。在這個範圍之外的日期都假設為用全球統一時間(Universal Coordinated Time,UTC)聲明和使用。
在系統內部,所有日期和時間都是用全球統一時間(UTC)格式儲存,也就是通常所說的格林威治時間(GMT)。時間在發給客戶前端前由資料庫伺服器轉換成本地時間,因而預設的時區是伺服器的時區。
有幾種影響時區特性的方法:
注意:如果設置了編譯選項 USE_AUSTRALIAN_RULES,那麼 EST 代表澳大利亞東部標準時間,( Australia Eastern Std Time)與UTC有 +10:00 小時的偏移量。
19世紀以前的日期傳統(歷法)對一些趣味讀物有意義,但是在我們這裡好像沒有充分的理由把它們編碼入日期/時間控制器裡面去。
| 上一頁 | 首頁 | 下一頁 |
| 字符型態 | 開頭 | 布爾型態 |