要直接在 Postgres 輸出中文格式的時間
只要設置 lc_time 這個 GUC 參數
並使用在地化輸出模式(日期參數的 TM 前綴)
就可以用正常的 to_char() 匯出對應的中文日期。
不過會轉成中文的地方,只有月份和週一到週日
日期部份只輸出數字,不會輸出中文,更不會輸出「廿一」或「卅一」囉~
若有中文的日期字串
也可以用 to_timestamp() 轉換中文日期字串為 timestamp 資料
只是對於全中文的月份、日期便無法轉換(因為 to_time() 與 to_timestamp() 不支援 TM 修飾字)
以下為簡單範例:
從 timestamp 資料型態輸出中文格式的日期
edb=# SET lc_time TO 'zh_TW.UTF8'; -- change locale SET edb=# SELECT to_char(now(),'tmdd tmmonth tmday tmyyyy'); to_char ------------------- 30 三月 週四 2017 (1 row) edb=# SELECT to_char(now(),'tmyyyy年 tmmonth tmdd日 tmday'); to_char ----------------------- 2017年 三月 30日 週四 (1 row) edb=# SELECT to_char(now(),'tmyy年 tmmonth tmdd日 tmday tmhh24:mi:ss'); to_char ------------------------------ 17年 三月 30日 週四 01:48:35 (1 row) edb=# SELECT to_char(now(),'tmyy年tmmonthtmdd日tmday'); to_char ------------------ 17年三月30日週四 (1 row)
把中文日期資料輸入資料庫,用 timestamp 型態儲存
edb=# SET lc_time TO 'zh_TW.UTF8'; -- change locale SET edb=# SELECT to_timestamp('11年3月14日15時9分','yy"年"mm"月"dd"日"hh24"時"mi"分"'); to_timestamp --------------------------- 14-MAR-11 15:09:00 +00:00 (1 row) edb=# -- 對照一下,to_date 用法 edb=# SELECT to_date('11-3-14-15:9','yy-mm-dd-hh24:mi'); to_date -------------------- 14-MAR-11 15:09:00 (1 row)
對照 Oracle XE 11gR2 底下,一樣是把中文日期資料輸入資料庫的狀況
SQL> SELECT to_date('11年3月14日15時9分','yy"年"mm"月"dd"日"hh24"時"mi"分"') FROM dual; TO_DATE('11年3月14 ------------------ 14-MAR-11 SQL> SELECT to_timestamp('11年3月14日15時9分','yy"年"mm"月"dd"日"hh24"時"mi"分"') from dual; TO_TIMESTAMP('11年3月14日15時9分','YY"年"MM"月"DD"日"HH24"時"MI"分"') --------------------------------------------------------------------------- 14-MAR-11 03.09.00.000000000 PM
最後,列舉一下 Postgres 本地日期轉換清單
edb=# SET lc_time TO 'zh_TW.UTF8'; -- change locale SET edb=# SELECT month, to_char(concat, 'Month Mon') AS "Month Mon", -- English to_char(concat, 'TMMonth TMMon') AS "TMMonth TMMon" -- localized FROM generate_series(1, 12) AS month, cast(concat('2017-', month, '-1') AS date); month | Month Mon | TMMonth TMMon -------+---------------+--------------- 1 | January Jan | 一月 1月 2 | February Feb | 二月 2月 3 | March Mar | 三月 3月 4 | April Apr | 四月 4月 5 | May May | 五月 5月 6 | June Jun | 六月 6月 7 | July Jul | 七月 7月 8 | August Aug | 八月 8月 9 | September Sep | 九月 9月 10 | October Oct | 十月 10月 11 | November Nov | 十一月 11月 12 | December Dec | 十二月 12月 (12 rows) edb=# SELECT to_char(concat, 'Day Dy') AS "Day Dy", -- English to_char(concat, 'TMDay TMDy') AS "TMDay TMDy" -- localized FROM generate_series(1, 7) AS day, cast(concat('2017-1-', day) AS date) ORDER BY extract(isodow FROM concat); Day Dy | TMDay TMDy ---------------+------------ Monday Mon | 週一 一 Tuesday Tue | 週二 二 Wednesday Wed | 週三 三 Thursday Thu | 週四 四 Friday Fri | 週五 五 Saturday Sat | 週六 六 Sunday Sun | 週日 日 (7 rows)
參考:
PostgreSQL: to_date Function
PostgreSQL: to_timestamp Function
Table 9-25. Template Pattern Modifiers for Date/Time Formatting | PostgreSQL: Documentation: 9.6: Data Type Formatting Functions
PostgreSQLで曜日・月名をいろんな言語で出力〔ロケール変更〕
沒有留言:
張貼留言