天天看點

Oracle格式化函數 to_char,to_date,to_number

1.格式化函數

函數 傳回 描述 例子

to_char (timestamp, text) text 把 timestamp 轉換成 string to_char (sysdate,'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_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')

2.1 用于 date/time 轉換的模闆

模闆 描述

HH 一天的小時數 (01-12)
HH12 一天的小時數 (01-12)
HH24 一天的小時數 (00-23)
MI 分鐘 (00-59)
SS 秒 (00-59)
SSSS 午夜後的秒 (0-86399)
AM or A.M. or PM or P.M. 正午辨別(大寫)
am or a.m. or pm or p.m. 正午辨別(小寫)
Y,YYY 帶逗号的年(4 和更多位)
YYYY 年(4和更多位)
YYY 年的後三位
YY 年的後兩位
Y 年的最後一位
BC or B.C. or AD or A.D. 年辨別(大寫)
bc or b.c. or ad or a.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;SUN=1)
W 一個月裡的周數
WW 一年裡的周數
CC 世紀(2 位)
J Julian 日期(自公元前4712年1月1日來的日期)
Q 季度
RM 羅馬數字的月份(I-XII;I=JAN)-大寫
rm 羅馬數字的月份(I-XII;I=JAN)-小寫

所有模闆都都允許使用字首和字尾修改器。模闆裡總是允許使用修改器。字首 'FX ' 隻是一個全局修改器。

2.2用于日期/時間模闆 to_char () 的字尾

字尾 描述 例子

FM 填充模式字首 FMMonth
TH 大寫順序數字尾 DDTH
th 小寫順序數字尾 DDTH
FX 固定模式全局選項(見下面) FX Month DD Day
SP 拼寫模式(還未實作) DDSP

用法須知:

  • 如果沒有使用 FX 選項,to_timestamp 和 to_date 忽略空白。FX 必須做為模闆裡的第一個條目聲明。
  • 反斜杠("\ ")必須用做雙反斜杠("\\ "),例如 '\\HH\\MI\\SS' 。
  • 雙引号('"')之間的字串被忽略并且不被分析。如果你想向輸出寫雙引号,你必須在雙引号前面放置一個雙反斜杠('\\'),例如 '\\"YYYY Month\\"' 。
  • to_char 支援不帶前導雙引号('"')的文本,但是在雙引号之間的任何字串會被迅速處理并且還保證不會被當作模闆關鍵字解釋(例如:'"Hello Year: "YYYY' )。

3.用于 to_char (numeric ) 的模闆

模闆 描述

9 帶有指定位數的值
前導零的值
. (句點) 小數 點
, (逗号) 分組(千)分隔符
PR 尖括号内負值
S 帶負号的負值(使用本地化)
L 貨币符号(使用本地化)
D 小數 點(使用本地化)
G 分組分隔符(使用本地化)
MI 在指明的位置的負号(如果數字 < 0)
PL 在指明的位置的正号(如果數字 > 0)
SG 在指明的位置的正/負号
RN 羅馬數字(輸入在 1 和 3999 之間)
TH or th 轉換成序數
V 移動 n 位(小數 )(參閱注解)
EEEE 科學記數。現在不支援。

用法須知:

  • 使用 'SG','PL' 或 'MI' 的帶符号字并不附着在數字上面;例如,to_char (-12, 'S9999') 生成 ' -12' ,而to_char (-12, 'MI9999') 生成 '- 12' 。 Oracle 裡的實作不允許在 9 前面使用 MI ,而是要求 9 在 MI 前面。
  • PL ,SG ,和 TH 是 Postgres 擴充。
  • 9 表明一個與在 9 字串裡面的一樣的數字位數。如果沒有可用的數字,那麼使用一個空白(空格)。
  • TH 不轉換小于零的值,也不轉換小數 。TH 是一個 Postgres 擴充。
  • V 友善地把輸入值乘以 10^n ,這裡 n 是跟在 V 後面的數字。to_char 不支援把 V 與一個小數 點綁在一起使用(例如. "99.9V99" 是不允許的)。

4. 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'