MathJax

MathJax-2

MathJax-3

Google Code Prettify

置頂入手筆記

EnterproseDB Quickstart — 快速入門筆記

由於考慮採用 EnterpriseDB 或是直接用 PostgreSQL 的人,通常需要一些入手的資料。這邊紀錄便提供相關快速上手的簡單筆記 ~ 這篇筆記以 資料庫安裝完畢後的快速使用 為目標,基本紀錄登入使用的範例:

2017年4月4日 星期二

Postgres 輸入/輸出中文日期

如何從 PostgreSQL 資料庫裡面的 Timestamp 資料型態,變出中文日期格式?


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

沒有留言:

張貼留言