9.8. 資料類型格式化函數

PostgreSQL 格式化函數提供一套有效的工具用於把各種資料類型 (日期/時間,integer,floating point,numeric) 轉換成格式化的字元串以及反過來從格式化的字元串轉換成 指定的資料類型。 Table 9-20 列出了這些函數。 這些函數都遵循一個公共的調用習慣: 第一個參數是待格式化的值,而第二個是一個定義輸出格式的模板。

Table 9-20. 格式化函數

函數返回類型描述例子
to_char(timestamp, text)text把時間戳轉換成字串to_char(current_timestamp, 'HH12:MI:SS')
to_char(interval, text)text把時間間隔轉為字串to_char(interval '15h 2m 12s', 'HH24:MI:SS')
to_char(int, text)text把整數轉換成字串to_char(125, '999')
to_char(double precision, text)text把實數/雙精度數轉換成字串to_char(125.8::real, '999D9')
to_char(numeric, text)text把 numeric 轉換成字串to_char(-125.8, '999D99S')
to_date(text, text)date把字串轉換成日期to_date('05 Dec 2000', 'DD Mon YYYY')
to_timestamp(text, text)timestamp with time zone把字串轉換成時間戳to_timestamp('05 Dec 2000', 'DD Mon YYYY')
to_number(text, text)numeric把字串轉換成 numericto_number('12,454.8-', '99G999D9S')

警告:to_char(interval, text) 已經廢棄了,在新寫的代碼裡不應該再用了。在下一個版本裡它將被刪除。

在輸出模板字串裡(對 to_char 而言),該函數族可以識別一些特定的模式,並且 把待格式化的數值正確地格式化成相應的資料。 任何不屬於模板模式的文本都簡單地照字拷貝。同樣,在一個輸入 模板字串裡(對除 to_char 外的任何東西),模板模式標識要查看的輸入資料字串,並且將在該位置 尋找數值。

Table 9-21 顯示了 可以用於格式化日期和時間值的模版。

Table 9-21. 用於日期/時間格式化的模式

模式描述
HH一天的小時數 (01-12)
HH12一天的小時數 (01-12)
HH24一天的小時數 (00-23)
MI分鐘 (00-59)
SS秒 (00-59)
MS毫秒 (000-999)
US微秒 (000000-999999)
SSSS午夜後的秒 (0-86399)
AMA.M.PMP.M.正午標識(大寫)
ama.m.pmp.m.正午標識(小寫)
Y,YYY帶逗號的年(4 和更多位)
YYYY年(4和更多位)
YYY年的後三位
YY年的後兩位
Y年的最後一位
IYYYISO 年(4位或更多位)
IYYISO 年的最後 3 位
IYISO 年的最後 2 位
IISO 年的最後一位
BCB.C.ADA.D.紀元標識(大寫)
bcb.c.ada.d.紀元標識(小寫)
MONTH全長大寫月份名(空白填充為9字元)
Month全長混合大小寫月份名(空白填充為9字元)
month全長小寫月份名(空白填充為9字元)
MON大寫縮寫月份名(3字元)
Mon縮寫混合大小寫月份名(3字元)
mon小寫縮寫月份名(3字元)
MM月份號(01-12)
DAY全長大寫日期名(空白填充為9字元)
Day全長混合大小寫日期名(空白填充為9字元)
day全長小寫日期名(空白填充為9字元)
DY縮寫大寫日期名(3字元)
Dy縮寫混合大小寫日期名(3字元)
dy縮寫小寫日期名(3字元)
DDD一年裡的日子(001-366)
DD一個月裡的日子(01-31)
D一周裡的日子(1-7;週日是1)
W一個月裡的周數(1-5)(第一周從該月第一天開始)
WW一年裡的周數(1-53)(第一周從該年的第一天開始)
IWISO 一年裡的周數(第一個星期四在第一周裡)
CC世紀(2 位)
J儒略日(自公元前4712年1月1日來的天數)
Q季度
RM羅馬數字的月份(I-XII;I=JAN)(大寫)
rm羅馬數字的月份(I-XII;I=JAN)(小寫)
TZ時區名 (大寫)
tz時區名 (小寫)

有一些修飾詞可以應用於模板來修改它們的行為。比如, FMMonth 就是 帶著 FM 前綴的 Month 模式。 Table 9-22 顯示了 用於日期/時間格式化的修飾詞模式。

Table 9-22. 日期/時間格式化的模板模式修飾詞

修飾詞描述例子
FM 前綴填充模式(抑制填充空白和零)FMMonth
TH 後綴大寫順序數後綴DDTH
th 後綴小寫順序數後綴DDth
FX 前綴固定格式全局選項(見用法須知)>FX Month DD Day
SP suffix拼寫模式(還未實現)DDSP

日期/時間格式化的用法須知:

Table 9-23 顯示了 可以用於數值格式化的模版模式。

Table 9-23. 用於數值格式化的模板模式

模式描述
9帶有指定數值位數的值
0帶前導零的值
. (句點)小數點
, (逗號)分組(千)分隔符
PR尖括號內負值
S帶符號的數值(使用區域設置)
L貨幣符號(使用區域設置)
D小數點(使用區域設置)
G分組分隔符(使用區域設置)
MI在指明的位置的負號(如果數字 < 0)
PL在指明的位置的正號(如果數字 > 0)
SG在指明的位置的正/負號
RN羅馬數字(輸入在 1 和 3999 之間)
THth序數後綴
V移動指定位(小數)(參閱註解)
EEEE科學記數。(現在還未實現)

數字格式化的用法須知:

Table 9-24 顯示了 一些使用 to_char 函數的用法。

Table 9-24. to_char 例子

資料表達式結果
to_char(current_timestamp, 'Day, DD  HH12:MI:SS')'Tuesday  , 06  05:39:18'
to_char(current_timestamp, 'FMDay, FMDD  HH12:MI:SS')'Tuesday, 6  05:39:18'
to_char(-0.1, '99.99')'  -.10'
to_char(-0.1, 'FM9.99')'-.1'
to_char(0.1, '0.9')' 0.1'
to_char(12, '9990999.9')'    0012.0'
to_char(12, 'FM9990999.9')'0012.'
to_char(485, '999')' 485'
to_char(-485, '999')'-485'
to_char(485,'9 9 9')' 4 8 5'
to_char(1485, '9,999')' 1,485'
to_char(1485, '9G999')' 1 485'
to_char(148.5, '999.999')' 148.500'
to_char(148.5, 'FM999.999')'148.5'
to_char(148.5, 'FM999.990')'148.500'
to_char(148.5, '999D999')' 148,500'
to_char(3148.5, '9G999D999')' 3 148,500'
to_char(-485, '999S')'485-'
to_char(-485, '999MI')'485-'
to_char(485, '999MI')'485 '
to_char(485, 'FM999MI')'485'
to_char(485, 'PL999')'+485'
to_char(485, 'SG999')'+485'
to_char(-485, 'SG999')'-485'
to_char(-485, '9SG99')'4-85'
to_char(-485, '999PR')'<485>'
to_char(485, 'L999')'DM 485
to_char(485, 'RN')'        CDLXXXV'
to_char(485, 'FMRN')'CDLXXXV'
to_char(5.2, 'FMRN')'V'
to_char(482, '999th')' 482nd'
to_char(485, '"Good number:"999')'Good number: 485'
to_char(485.8, '"Pre:"999" Post:" .999')'Pre: 485 Post: .800'
to_char(12, '99V999')' 12000'
to_char(12.4, '99V999')' 12400'
to_char(12.45, '99V9')' 125'