要直接在 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で曜日・月名をいろんな言語で出力〔ロケール変更〕
沒有留言:
張貼留言