轉換函式

brj880719發表於2017-09-23

一、日期格式說明

型別 說明
Cc 兩位數字的世紀
scc 有負號的兩位數字的世紀,表示世紀前
Q 表示一位數季度
yyyy 表示4位數年
iyyy 表示4位數年,ISO格式
rrrr 表示當前年的4位數字的圓整年
y,yyy 有逗號的4位數字年
Yyy 年的最後3位數字
Yy 年的最後2位數字
Iyy 年的最後2位數字,ISO格式
Rr 基於當前年的兩位數字的圓整年
Y 年的最後1位數字
I 年的最後1位數字,ISO格式
YEAR 年名稱為大寫字母
Year 年名稱首為大寫字母
Mm 兩為數字月
MONTH 月名稱全稱,大寫字母9個字元,位數不足用空格補
Month 月份的名稱全程,首字母大寫,9個字元,不足補空格
MON 月份名稱的前3個字母,大寫
Mon 月份名稱的前3個字母,首字大寫
RM 羅馬數字月
Ww 年中的2位數字星期
Iw 年中的2位數字星期,ISO標準
W 月中的一位數字星期
ddd 年中的3位數字日
Dd 月中的兩位數字日
D 週中的一位數字日
DAY 日的全稱,大寫字母
Day 日的全稱,首字母大寫
DY 日的前三個字母,大寫
Dy 日的前三個字母,首字母大寫
hh24 兩位數字小時,24小時制
Hh 兩位數字小時,12小時制
Mi 兩位數字分鐘
Ss 兩位數字秒
ff[1...9] 小數數字秒,小數部分指定
sssss 過去12點的秒數
Ms 毫秒
Cs 釐秒
[-/,.;:] 日期時間中的分隔符
TH th 數字的字尾
SP,sp 拼讀數字
SPTH,spth sp和th的組合
Tzh 時區小時
tzr 時區區域

二、數字格式說明

格式 例子 說明
, '9999,999' 逗號,一般以千分位出現,作為分組符號使用。如果需要您也可以當作是十分位,百分位出現,可以出現N次,視乎數字的大小而定。
變態的例子是 to_char(1234,'9,9,9,9')。
注意事項:只能出現在整數部分。
. '99.99' 點號,不要念為"句號",句號是個圓圈,點好只能出現在小數點對應的地方.只能出現一次.
to_char(1234.34,'9,999.99')
注意事項:只能出現在一個地方,就是原來資料小數點位置
$ '$999.99' 美元.其實你可以放在任意地方(在10G下)
to_char(1234.34,'9,999.$99') 
注意事項:只能出現一次。
0 '0999.99' 零.在對應位置返回對應的字元,如果沒有則以'0'填充。
to_char(1234,'9999.00')='1234.00';
注意事項:這是一個強制的符號,對應位沒有,則以'0'填充,這是9很大不同地方
9 '999.99' 9 在小數位,則表示轉換為對應字元,如果沒有則以0表示;在整數位,沒有對應則不填充字元。
TO_CHAR(123,'999.99')=123.00;
TO_CHAR(123,'99999.9')=123.0;
注意事項:對於0和9而言,如果格式的位數不如數字的位數多,會返回'#'。
譬如to_char(12345,'9999')='#####'
B 'B999' 'B999'
沒有其它特別作用,在整數部分最前面加一個空格,可以出現在任意位置.
'S'||TO_CHAR(1234,'99B99')='S 1234';
注意事項:只能出現在整數部位。
C 'C9999' 在特定的位置返回一個ISO貨幣符號(就是NLS_ISO_CURRENCY引數所代表的值)
TO_CHAR(1233,'C9999')='CNY1234',這是新的國際標準RMB,關於這個可查詢“國際貨幣符號”
注意事項:只能出現在整數部位第一位。
可以通過alter session set NLS_ISO_CURRENCY='JAPAN';來修改當前會話的設定。
D '999D99' 這是“點號”的國際版本(ISO),作用等同於點號,也是隻能出現一次。所不同的是,資料庫會根據NLS_NUMERIC_CHARACTER的引數值來設定內容。預設的這個值是點號.
注意事項:沒有特別需要一般不要用這個格式符號。也不要輕易修改引數值。
也可用alter sesssion set 來修改.
alter session set nls_numeric_characters='!';
to_char(1234.34,'9999d99')=1234!34
EEEE 9.9EEEE 科學計算符號
TO_CHAR(2008032001,'9.9EEEE')='2.01E+09',由於是科學計算方法,所以小數位前面加一個9或者0即可,多個是沒有意義的。
G 999G999 是逗號(,)的的ISO標準,作為分組符號使用,可以放在多個地方使用.
TO_CHAR(123456,'999G9G99')=123,4,56
注意事項:同第八項 -D, 此外如果要轉換出小數點,則要和D配合使用,不能和點號配合。
L 'L999' 是C的本地版本。可以放在整個格式的最前面和最後面.
TO_CHAR(123456,'999G9G99D00L')=123,4,56.00¥
注意事項:同第七項 C
MI '9999MI' 如果是負數,在尾部加上負號(-),如果是正數,則尾巴加上空格
to_char(1234,'9999mi')||'S'||TO_CHAR(-5678,'9999MI') =1234 S5678-
注意事項:只能放在格式尾巴
PR 9999PR 是表達負數的另外一種方式。如果是正數,則頭部加上空格;如果是負數,則用小簡括號<>把數字包起來.
TO_CHAR(-1234.89,'9G999D00PR')=<1,234.89>
注意事項:同上
RN(rn) RN(rn) 把整數(1-3999)轉換為羅馬字元。RN表示轉為大寫,rn表示小寫的.
declare
i int;
begin
for i in 1..20 loop
dbms_output.put_line(to_char(i,'RN'));
end loop;
end;
注意事項:只能自己使用,不能和其它符號組合使用。
S '9999S' 是以上兩個符號的綜合改進版本。為整數加一個正號+,為負數加一個符號-。S在前則加在前,在後則在後.
TO_CHAR(-1234,'S9999')=-1234;
TO_CHAR(1234,'S9999')=+1234
TM TM9/TMe 使用這個引數等於沒有用引數to_char(number)一樣,應為'tm9'是預設的格式引數。
to_char(1234,'tme')=1234
注意事項:格式要麼是TM9,要麼是TME。
當數字長度超過64位時候,TM9的輸出等同於TME的輸出。
U U999 雙幣符號,例如歐元.作用同11的L
TO_CHAR(999,'U999')=¥999
注意事項:通過NLS_DUAL_CURRENCY 控制
V 999V9 這是個比較古怪,又不是很常使用的符號。它的作用在於做一個計算。
例如TO_CHAR(N,'999V9'),以p表示V的位置,則該表示式=to_char(N×(10的P-1次方))。但是9個數又必須保證大於等於乘積之後表示的位數。
TO_CHAR(5,'9V')=5*1=5;
TO_CHAR(5,'9V9')=5*10=50
TO_CHAR(5,'9V99')=500
TO_CHAR(50,'9V99')='######' 9的個數不夠
注意事項:格式中不能和小數表達寫在一起,但是可以混合貨幣等。
X xxxx 轉換為16進位制。
TO_CHAR(100,'XX')= 64
注意事項:數值必須是大於等於0的整數。前面只能和0或者FM組合使用。

三、隱式轉換

1、日期:樣式根據nls_date_format引數,一致可相互隱式轉換

  a)  varchar2 -> to date

  b)  date -> to varchar2

2、數字:純數字格式可以相互轉換

  a)  varchar2 -> to number

  b)  number -> to varchar2

四、轉換函式

函式 說明
TO_CHAR 語法:TO_CHAR(datatime|interval, format)
說明:將NUMBER或DATE型別的值轉換為字串
例句:
  1. SELECT TO_CHAR(SYSDATE,'YYYY-MM-DD') FROM DUAL;
  2. SELECT TO_CHAR(123456.78,'999,999.99') FROM DUAL;
TO_DATE 語法:TO_DATE(str, format)
說明:將NUMBER、CHAR或VARCHAR2轉換為DATE型別值
例句:
  1. SELECT TO_DATE('1988-07-19','YYYY-MM-DD') FROM DUAL;
TO_NUMBER 語法:TO_NUMBER(str, format)
說明:將CHAR或VARCHAR2轉換為一個數值
例句:
  1. SELECT TO_DATE('1988-07-19','YYYY-MM-DD') FROM DUAL;

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24851054/viewspace-2145370/,如需轉載,請註明出處,否則將追究法律責任。

相關文章