Oracle to_char函數(shù)的使用方法
Oracle to_char函數(shù)的功能是將數(shù)值型或者日期型轉(zhuǎn)化為字符型,下面就為您詳細(xì)介紹Oracle to_char函數(shù)的使用,希望對(duì)您能有所幫助。
Postgres 格式化函數(shù)提供一套有效的工具用于把各種數(shù)據(jù)類(lèi)型(日期/時(shí)間,int,float,numeric)轉(zhuǎn)換成格式化的字符串以及反過(guò)來(lái)從格式化的字符串轉(zhuǎn)換成原始的數(shù)據(jù)類(lèi)型。
注意:所有格式化函數(shù)的第二個(gè)參數(shù)是用于轉(zhuǎn)換的模板。
表 5-7. 格式化函數(shù)
表 5-8. 用于 date/time 轉(zhuǎn)換的模板
模板 | 描述 |
---|---|
HH | 一天的小時(shí)數(shù) (01-12) |
HH12 | 一天的小時(shí)數(shù) (01-12) |
HH24 | 一天的小時(shí)數(shù) (00-23) |
MI | 分鐘 (00-59) |
SS | 秒 (00-59) |
SSSS | 午夜后的秒 (0-86399) |
AM or A.M. or PM or P.M. | 正午標(biāo)識(shí)(大寫(xiě)) |
am or a.m. or pm or p.m. | 正午標(biāo)識(shí)(小寫(xiě)) |
Y,YYY | 帶逗號(hào)的年(4 和更多位) |
YYYY | 年(4和更多位) |
YYY | 年的后三位 |
YY | 年的后兩位 |
Y | 年的最后一位 |
BC or B.C. or AD or A.D. | 年標(biāo)識(shí)(大寫(xiě)) |
bc or b.c. or ad or a.d. | 年標(biāo)識(shí)(小寫(xiě)) |
MONTH | 全長(zhǎng)大寫(xiě)月份名(9字符) |
Month | 全長(zhǎng)混合大小寫(xiě)月份名(9字符) |
month | 全長(zhǎng)小寫(xiě)月份名(9字符) |
MON | 大寫(xiě)縮寫(xiě)月份名(3字符) |
Mon | 縮寫(xiě)混合大小寫(xiě)月份名(3字符) |
mon | 小寫(xiě)縮寫(xiě)月份名(3字符) |
MM | 月份 (01-12) |
DAY | 全長(zhǎng)大寫(xiě)日期名(9字符) |
Day | 全長(zhǎng)混合大小寫(xiě)日期名(9字符) |
day | 全長(zhǎng)小寫(xiě)日期名(9字符) |
DY | 縮寫(xiě)大寫(xiě)日期名(3字符) |
Dy | 縮寫(xiě)混合大小寫(xiě)日期名(3字符) |
dy | 縮寫(xiě)小寫(xiě)日期名(3字符) |
DDD | 一年里的日子(001-366) |
DD | 一個(gè)月里的日子(01-31) |
D | 一周里的日子(1-7;SUN=1) |
W | 一個(gè)月里的周數(shù) |
WW | 一年里的周數(shù) |
CC | 世紀(jì)(2 位) |
J | Julian 日期(自公元前4712年1月1日來(lái)的日期) |
Q | 季度 |
RM | 羅馬數(shù)字的月份(I-XII;I=JAN)-大寫(xiě) |
rm | 羅馬數(shù)字的月份(I-XII;I=JAN)-小寫(xiě) |
所有模板都都允許使用前綴和后綴修改器。模板里總是允許使用修改器。前綴 'FX' 只是一個(gè)全局修改器。
表 5-9. 用于日期/時(shí)間模板 to_char() 的后綴
后綴 | 描述 | 例子 |
---|---|---|
FM | 填充模式前綴 | FMMonth |
TH | 大寫(xiě)順序數(shù)后綴 | DDTH |
th | 小寫(xiě)順序數(shù)后綴 | DDTH |
FX | 固定模式全局選項(xiàng)(見(jiàn)下面) | FX Month DD Day |
SP | 拼寫(xiě)模式(還未實(shí)現(xiàn)) | DDSP |
用法須知:
- 如果沒(méi)有使用 FX 選項(xiàng),to_timestamp 和 to_date 忽略空白。FX 必須做為模板里的第一個(gè)條目聲明。
- 反斜杠("\")必須用做雙反斜杠("\\"),例如 '\\HH\\MI\\SS'。
- 雙引號(hào)('"')之間的字串被忽略并且不被分析。如果你想向輸出寫(xiě)雙引號(hào),你必須在雙引號(hào)前面放置一個(gè)雙反斜杠('\\'),例如 '\\"YYYY Month\\"'。
- to_char 支持不帶前導(dǎo)雙引號(hào)('"')的文本,但是在雙引號(hào)之間的任何字串會(huì)被迅速處理并且還保證不會(huì)被當(dāng)作模板關(guān)鍵字解釋?zhuān)ɡ纾?tt>'"Hello Year: "YYYY')。
表 5-10. 用于 to_char(numeric) 的模板
用法須知:
- 使用 'SG','PL' 或 'MI' 的帶符號(hào)字并不附著在數(shù)字上面;例如,to_char(-12, 'S9999') 生成 ' -12',而 to_char(-12, 'MI9999') 生成 '- 12'。Oracle 里的實(shí)現(xiàn)不允許在 9 前面使用 MI,而是要求 9 在 MI 前面。
- PL,SG,和 TH 是 Postgres 擴(kuò)展。
- 9 表明一個(gè)與在 9 字串里面的一樣的數(shù)字位數(shù)。如果沒(méi)有可用的數(shù)字,那么使用一個(gè)空白(空格)。
- TH 不轉(zhuǎn)換小于零的值,也不轉(zhuǎn)換小數(shù)。TH 是一個(gè) Postgres 擴(kuò)展。
- V 方便地把輸入值乘以 10^n,這里 n 是跟在 V 后面的數(shù)字。to_char 不支持把 V 與一個(gè)小數(shù)點(diǎn)綁在一起使用(例如. "99.9V99" 是不允許的)。
表 5-11. 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' |
Oracle to_char函數(shù)最簡(jiǎn)單的應(yīng)用:
/*1.0123--->'1.0123'*/
Select TO_CHAR(1.0123) FROM DUAL
/*123--->'123'*/
Select TO_CHAR(123) FROM DUAL
接下來(lái)再看看下面:
/*0.123 ---> '.123' */
SELEC TO_CHAR(0.123) FROM DUAL
上面的結(jié)果 '.123' 在大多數(shù)情況下都不是我們想要的結(jié)果,我們想要的應(yīng)該是 '0.123'。
我們來(lái)看一下to_char函數(shù)的具體用法:
TO_CHAR ( n [, fmt [, 'nlsparam']] )
Oracle to_char函數(shù)將NUMBER類(lèi)型的n按數(shù)值格式fmt轉(zhuǎn)換成VARCHAR2類(lèi)型的值。'nlsparams'指定由數(shù)值格式的元素返回的字符,包括:
.小數(shù)點(diǎn)字符
.組分隔符
.本地錢(qián)幣符號(hào)
.國(guó)際錢(qián)幣符號(hào)
變?cè)男问綖椋?/p>
'NLS_NUMERIC_CHARACTERS="dg" NLS_CURRENCY="tcxt" NLS_ISO_CURRENCY=territory'
其中d為小數(shù)點(diǎn)字符,g為組分隔符。
例 :TO_CHAR (17145,'L099G999','NLS_NUMERIC_CHARACTERS=".," NLS_CURRENCY="NUD"')=NUD017,145
通過(guò)上面的了解,再查看fmt的一些格式,我們可以用以下表達(dá)式得到'0.123'的值:
/*0.123 ---> ' 0.123' */
Select TO_CHAR(0.123,'0.999') FROM DUAL
/*100.12 ---> '######' */
Select TO_CHAR(100.12,'0.999') FROM DUAL
/*1.12 ---> ' 1.120' */
Select TO_CHAR(1.12,'0.999') FROM DUAL
' 0.123'是出來(lái)了,可是前面又多了一個(gè)空格。
對(duì)于 100.12 的值卻是######,以及'1.12'的值變成了 '1.120'。
我們重新確定一個(gè)新的需求:
1、去空格
2、小數(shù)點(diǎn)最多4位,最少保留2位。
1--->'1.00';1.1--->'1.00';1.12-->'1.12';1.1234--->'1.1234';
1.12345--->'1.1235'
最終實(shí)現(xiàn)如下:
/*
FM :除空格
9999999.0099:允許小數(shù)點(diǎn)左邊最大正數(shù)為7位,小數(shù)點(diǎn)右邊最少2位,最多4位,且在第5位進(jìn)行四舍五入
*/
Select TO_CHAR(123.0233,'FM9999999.0099') FROM DUAL
相關(guān)文章
ORACLE中dbms_output.put_line輸出問(wèn)題的解決過(guò)程
最近用dbms_output.put_line來(lái)輸出變量的一些信息,卻總是看不到結(jié)果,所以這篇文章主要給大家介紹了關(guān)于ORACLE中dbms_output.put_line輸出問(wèn)題的解決過(guò)程,需要的朋友可以參考下2022-06-06在ADF中跟蹤SQL執(zhí)行時(shí)間實(shí)現(xiàn)代碼
ADF是oracle提供的一套企業(yè)開(kāi)發(fā)的解決方案,本文將實(shí)現(xiàn)在ADF中跟蹤SQL執(zhí)行時(shí)間2012-11-11Oracle9iPL/SQL編程的經(jīng)驗(yàn)小結(jié)
Oracle9iPL/SQL編程的經(jīng)驗(yàn)小結(jié)...2007-03-03PL/SQL Number數(shù)字類(lèi)型函數(shù)
PL/SQL Number數(shù)字類(lèi)型函數(shù)...2007-03-03Oracle中serveroutput參數(shù)一次設(shè)置永久保存方法
serveroutput是sqlplus的配置參數(shù),而不是數(shù)據(jù)庫(kù)的配置參數(shù),每次都需要修改并保存sqlplus的配置參數(shù),本文將介紹如何一次設(shè)置永久保存2012-11-11oracle數(shù)據(jù)庫(kù)創(chuàng)建備份與恢復(fù)腳本整理
oracle數(shù)據(jù)庫(kù)創(chuàng)建備份與恢復(fù)是oracle數(shù)據(jù)庫(kù)日常維護(hù)經(jīng)常用到的,下面與大家分享下常用腳本的整理,不會(huì)的朋友可以參考下哈2013-05-05Oracle中執(zhí)行動(dòng)態(tài)SQL
這篇文章介紹了Oracle中執(zhí)行動(dòng)態(tài)SQL的方法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-05-05解決Windows10不能安裝Oracle?11g的問(wèn)題(附詳細(xì)安裝教程)
這篇文章介紹了解決Windows10不能安裝Oracle?11g的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04IntelliJ DataGrip Oracle 11g遠(yuǎn)程連接的方法步驟
本文主要介紹了IntelliJ DataGrip Oracle 11g遠(yuǎn)程連接的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09oracle數(shù)據(jù)匹配merge into的實(shí)例詳解
這篇文章主要介紹了oracle數(shù)據(jù)匹配merge into的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下2017-10-10