PostgreSQL
上一頁 第五章. 函數 下一頁

格式化函數

作者:Karel Zak 寫於 2000-01-24。

格式化函數提供一套有效的工具用於把各種數據型態(日期/時間,int,float,numeric)轉換成格式化的字符串以及反過來從格式化的字符串轉換成原始的數據型態。

表 5-6. 格式化函數

函數 返回 描述 例子
to_char(datetime, text) text 把datetime 轉換成 string to_char('now'::datetime, 'HH12:MI:SS')
to_char(timestamp, text) text 把 timestamp 轉換成 string to_char( now(), 'HH12:MI:SS')
to_char(int, text) text 把 int4/int8 轉換成 string to_char(125, '999')
to_char(float, text) text 把 float4/float8 轉換成 string to_char(125.8, '999D9')
to_char(numeric, text) text 把 numeric 轉換成 string to_char(-125.8, '999D99S')
to_datetime(text, text) datetime 把 string 轉換成 datetime to_datetime('05 Dec 2000 13', 'DD Mon YYYY HH')
to_date(text, text) date 把 string 轉換成 date to_date('05 Dec 2000', 'DD Mon YYYY')
to_timestamp(text, text) date 把 string 轉換成 timestamp to_timestamp('05 Dec 2000', 'DD Mon YYYY')
to_number(text, text) numeric 把 string 轉換成 numeric to_number('12,454.8-', '99G999D9S')

所有格式化函數都是 format-picture (格式圖)的第二個參數。

表 5-7. 用於日期/時間 to_char() 版本的Format-pictures。

Format-picture 描述
HH 一天中的小時 (01-12)
HH12 一天中的小時 (01-12)
MI 分鐘 (00-59)
SS 秒 (00-59)
SSSS 過了午夜的秒 (0-86399)
Y,YYY 帶逗號的年 (4 或更多位)
YYYY 年 (4 或更多位)
YYY 年的最後三位
YY 年的最後兩位
Y 年的最後一位
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; SUN=1)
W 月中的周
WW 年中的周
CC 世紀(兩位)
J julian 日子(從4712 BC 年一月一日以來的日子)
Q 季度
RM 羅馬數字的月份 (I-XII; I=JAN)

所有 format-pictures (格式圖)允許使用後綴(後綴/前綴)。對於近似 format-picture(格式圖),後綴總是有效的。'FX'只是全局前綴。

表 5-8. 用於日期/時間 to_char() 版本的 format-pictures (格式圖)後綴。

後綴 描述 例子
FM 填充模式-前綴 FMMonth
TH 大寫順序數-前綴 DDTH
th 小寫順序數-後綴 DDTH
FX FX - (固定模式)全局 format-picture (格式圖)開關。如果沒有使用這個選項 TO_DATETIME / TO_DATE 忽略空白。必須作為formt-picture(格式圖)裡的第一個項目使用。 FX Month DD Day
SP 拼寫模式(目前未實現) DDSP

'\' - 必須用做雙 \\,例如 '\\HH\\MI\\SS'

'"' - 雙引號之間的字串被忽略並且不被分析。如果你想向輸出寫 '"' 你必須用 \\",例如 '\\"YYYY Month\\"'。

text - PostgreSQL 的 to_char() 支援不帶 '"' 的文本,但是帶有雙引號的字串會快些並且可以保証該文本不會被解釋成關鍵字(format-picture,格式圖),例如 '"Hello Year: "YYYY'。

表 5-9. 用於數字 (int/float/numeric) to_char() 版本的Format-pictures (格式圖)。

格式圖 描述
9 返回指定位數的值,如果不夠位數用空白代替
0 像 9 一樣,但是把空白替換成零
. (句點) 小數點
, (逗號) 分組(千進)分隔符
PR 在尖括號內返回負數
S 用負號返回負數(使用本地)
L 貨幣符號(使用本地)
D 小數點(使用本地)
G 分組符(使用本地)
MI 在指定位置返回負號(如果數字 < 0)
PL 在指定位置返回正號(如果數字 > 0) PostgreSQL 擴展
SG 在指定位置返回正/負號(如果數字 < 0) - PostgreSQL 擴展
RN 返回數字的羅馬數字(數字必須介於1 和 3999之間)
TH 或th 把數字轉換成自然數(如果是負數或小數不轉換) - PostgreSQL 擴展
V arg1 * (10 ^ n)﹔- 返回一個乘以 10^n (這裡 'n' 是'V'後面的數字 '9')。to_char() 不支援同時使用 'V' 和小數點,如 "99.9V99"。
EEEE 科學記數,目前不支援。

注意:通過A sign formatted via 'SG','PL' 或 'MI' 格式化的符號數不一定是數字﹔to_char(-12, 'S9999')產生:

 '  -12' 

,但是 to_char(-12, 'MI9999')產生:

 '-  12' 

。Oracle 不允許在 '9' 前面使用 'MI',在 Oracle 裡,它總是在 '9' 後面。.

表 5-10. to_char()的例子

輸入 輸出
to_char(now(), 'Day, HH12:MI:SS')
 'Tuesday  , 05:39:18' 
to_char(now(), 'FMDay, HH12:MI:SS')
 'Tuesday, 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, '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, '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-decimal:"999" Post-decimal:" .999')
 'Pre-decimal: 485 Post-decimal: .800' 
to_char( 12, '99V999')
 ' 12000' 
to_char( 12.4, '99V999')
 ' 12400' 
to_char( 12.45, '99V9')
 ' 125' 

上一頁 首頁 下一頁
日期/時間函數 開頭 幾何函數