Oracle格式化数字和日期的方法
http://blog.csdn.net/szwangdf/article/details/1570005
to_char,函數(shù)功能,就是將數(shù)值型或者日期型轉(zhuǎn)化為字符型。
比如最簡單的應(yīng)用:
/*1.0123--->'1.0123'*/Select?TO_CHAR(1.0123)?FROM?DUAL
/*123--->'123'*/
Select?TO_CHAR(123)?FROM?DUAL
?接下來再看看下面:
/*0.123?--->?'.123'?*/SELEC?TO_CHAR(0.123)?FROM?DUAL
?上面的結(jié)果 '.123' 在大多數(shù)情況下都不是我們想要的結(jié)果,我們想要的應(yīng)該是 '0.123'。
我們來看一下to_char函數(shù)的具體用法:
TO_CHAR ( n [, fmt [, 'nlsparam']] ) 該函數(shù)將NUMBER類型的n按數(shù)值格式fmt轉(zhuǎn)換成VARCHAR2類型的值。'nlsparams'指定由數(shù)值格式的元素返回的字符,包括:.小數(shù)點(diǎn)字符
.組分隔符
.本地錢幣符號
.國際錢幣符號
變元的形式為:
'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
通過上面的了解,再查看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'是出來了,可是前面又多了一個空格。
對于 100.12 的值卻是######,以及'1.12'的值變成了 '1.120'。
我們重新確定一個新的需求:
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
?
===========
http://www.5ienet.com/note/html/numdate/oracle-number-format.shtml
二、 數(shù)值
格式串 說明及示例
---------- -----------------------------------------------------------
, 在指定位置附加逗號(便于閱讀),注意逗號不能出現(xiàn)于格式字串首位,并且對于小數(shù)點(diǎn)的數(shù)字無效
例如:
SQL> select to_char(389999.00,¨99,999,999¨) from dual;
TO_CHAR(389
-----------
389,999
. 按指定格式顯示小數(shù)點(diǎn)及小數(shù)點(diǎn)后位置(指定數(shù)字沒有小數(shù)的話,以0補(bǔ)足)
例如:
SQL> select to_char(18,¨999.000¨) from dual;
TO_CHAR(
--------
18.000
$ 字符前附加$符
例如:
SQL> select to_char(18,¨$999¨) from dual;
TO_CH
-----
$18
SQL> select to_char(18,¨999$¨) from dual;
TO_CH
-----
$18
0 字符頭部或尾部附加0
例如:
SQL> select to_char(18.0,¨0999¨) from dual;
TO_CH
-----
0018
9 與上類似以指定長度返回?cái)?shù)值格式,不過如果被格式化的數(shù)值長度短于指定格式,則以空格補(bǔ)足。
例如:
SQL> select to_char(18.0,¨9999¨) from dual;
TO_CH
-----
18
B 當(dāng)整數(shù)部分是0時返回空格(即使存在0格式串也忽略)。
例如:
SQL> select to_char(0.18,¨B0999¨) from dual;
TO_CH
-----
C 返回ISO默認(rèn)指定的標(biāo)識(默認(rèn)標(biāo)識可參見:NLS_ISO_CURRENCY)
例如:
SQL> select to_char(128.18,¨C999999.99¨) from dual;
TO_CHAR(128.18,¨C
-----------------
CNY128.18
D 返回指定的小數(shù)點(diǎn)形式(默認(rèn)符:.)(默認(rèn)標(biāo)識可參見:NLS_NUMERIC_CHARACTER)
例如:
SQL> select to_char(128.18,¨9999D99¨) from dual;
TO_CHAR(
--------
128.18
SQL> alter session set nls_numeric_characters=¨:"¨;
會話已更改。
SQL> select to_char(128.18,¨9999D99¨) from dual;
TO_CHAR(
--------
128:18
EEEE 使用科學(xué)記數(shù)法顯示
例如:
SQL> select to_char(128.18,¨9EEEE¨) from dual;
TO_CHAR
-------
1E+02
G 與逗號功能類似,用指定字符分隔字串(默認(rèn)符:,)(默認(rèn)標(biāo)識可參見:NLS_NUMERIC_CHARACTER)。
例如:
SQL> select to_char(11128.18,¨99G999¨) from dual;
TO_CHAR
-------
11,128
SQL> alter session set nls_numeric_characters=¨:"¨;
會話已更改。
SQL> select to_char(11128.18,¨99G999¨) from dual;
TO_CHAR
-------
11"128
L 指定位置顯示本地默認(rèn)符號(默認(rèn)值見:NLS_CURRENCY)
例如:
SQL> select to_char(999,¨L999¨) from dual;
TO_CHAR(999,¨L
--------------
¥999
SQL> alter session set nls_currency=¨haha¨;
會話已更改。
SQL> select to_char(999,¨L999¨) from dual;
TO_CHAR(999,¨L
--------------
haha999
MI 負(fù)值在尾部顯示-號,正值在尾部附加空格。另:該格式符必須處于格式串尾部
例如:
SQL> select to_char(-18,¨999MI¨) from dual;
TO_C
----
18-
SQL> select to_char(18,¨999MI¨) from dual;
TO_C
----
18
PR 負(fù)值以<>尖括號包括,正值在頭尾部各附加空格。另:該格式符必須處于格式串尾部
例如:
SQL> select to_char(-18,¨999PR¨) from dual;
TO_CH
-----
<18>
SQL> select to_char(18,¨999PR¨) from dual;
TO_CH
-----
18
RN/rn 返回羅馬數(shù)字形式。注:大寫格式串返回大寫羅馬數(shù)字,小寫格式串返回小寫羅馬數(shù)字:)
例如:
SQL> select to_char(18,¨RN¨) from dual;
TO_CHAR(18,¨RN¨
---------------
XVIII
SQL> select to_char(18,¨rn¨) from dual;
TO_CHAR(18,¨RN¨
---------------
xviii
S 顯示數(shù)值正負(fù)值符號。可出現(xiàn)于格式串首部或尾部。
例如:
SQL> select to_char(18,¨S9999¨) from dual;
TO_CH
-----
+18
SQL> select to_char(18,¨9999S¨) from dual;
TO_CH
-----
18+
TM 字符格式轉(zhuǎn)換(標(biāo)準(zhǔn)數(shù)值與科學(xué)計(jì)數(shù)法),可以通過附加9或e控制輸出,默認(rèn)是tm9,如果輸出超過64個字符,則數(shù)據(jù)庫自動轉(zhuǎn)換成科學(xué)計(jì)數(shù)法顯示。該格式串不能與其它的數(shù)值型格式串同時使用。
例如:
SQL> select TO_CHAR(128,¨tme¨) from dual;
TO_CHAR(128,¨TME¨)
----------------------------------------------------------------
1.28E+02
SQL> select TO_CHAR(1.28E+02,¨tm¨) from dual;
TO_CHAR(1.28E+02,¨TM¨)
----------------------------------------------------------------
128
U 與L類似,在指定位置顯示貨幣單位(默認(rèn)值見:NLS_DUAL_CURRENCY)
例如:
SQL> select TO_CHAR(128,¨999U¨) from dual;
TO_CHAR(128,¨9
--------------
128 ¥
SQL> alter session set nls_dual_currency=¨aaa¨;
會話已更改。
SQL> select TO_CHAR(128,¨999U¨) from dual;
TO_CHAR(128,¨9
--------------
128aaa
V 數(shù)值+10的n次方,n=V后9的個數(shù)
例如:
SQL> select TO_CHAR(128,¨999V999¨) from dual;
TO_CHAR
-------
128000
X 返回指定數(shù)值對應(yīng)的16進(jìn)制數(shù),必須是正數(shù)。如果指定數(shù)值非整的話,oracle會自動round取整。
例如:
SQL> select TO_CHAR(16,¨XXXX¨) from dual;
TO_CH
-----
10
| (2)日期及時間格式續(xù) | 
| [君三思] 2007-12-14 | 
 SSSSS 返回自午夜到指定時間共逝去的秒數(shù)(范圍:0-86399)
 DL 根據(jù)數(shù)據(jù)庫nls_date_format參數(shù)中的設(shè)置及nls_language,nls_territory參數(shù)中的格式返回長日期形式,有點(diǎn)兒繞,呵呵你試試就知道了
 DS 與上相同返回短日期形式
 TS 與DL,DS參數(shù)類似,不過ts返回的是時間
 DY 返回日期簡寫
 RR RR 參數(shù)與YY參數(shù)很類似,但取值規(guī)則略有不同:
 
 RRRR 輸入值可以是2位也可以是4位,2位時規(guī)則與RR完全相同。 
 
 FM 填充模式。 Oracle 默認(rèn)使用空白字符填充被格式化的元素,確保寬度一致。例如: 
 如上例可以看到,不管幾月份,其返回所占長度是一致的。 
 
 
 
 FX 精確匹配。使用FX參數(shù)之后:
 
 X 本地的默認(rèn)分隔符
 以下四項(xiàng)為時區(qū)相關(guān)參數(shù), 明確表示某一個時區(qū),應(yīng)該聯(lián)合使用 TZH TZM 或者 TZR TZDTZD /TZR
 TZH/TZM
 應(yīng)用示例:1、 與指定日期在同一周,周1的日期是:
 2、 指定日期當(dāng)月最后一個星期天:
 3、 今年第127天是幾號:
  | 
?
===
http://www.5ienet.com/note/html/numdate/oracle-date-time-format(1).shtml
| (1)日期及時間格式 | 
| [君三思] 2007-12-13 | 
|   經(jīng)常遇到有朋友問詢關(guān)于日期時間格式化的問題(或可以通過格式化輕易解決),經(jīng)過參考Oracle SQL Reference官方文檔,并附上詳細(xì)的應(yīng)用示例綜合成文,希望能夠?qū)Υ蠹覍W(xué)習(xí)和使用有所幫助。本篇可視為"oracle著名及非著名函數(shù)介紹"的補(bǔ)充! 環(huán)境:
 一、 日期及時間格式串 說明及示例 ---------- ----------------------------------------------------------- -/,.;: 指定返回字串分隔符
 AD/A.D. 公元標(biāo)識
 BC/B.C. 公元標(biāo)識
 AM/A.M. 子午線標(biāo)識
 PM/P.M. 子午線標(biāo)識
 CC/SCC 世紀(jì)標(biāo)識,S前綴指定如遇公元前的顯示,會在顯示前加(-)提示: 
 
 D 指定日期在周中的數(shù)值(范圍:1-7)
 DD 指定日期在當(dāng)月中的天數(shù)(范圍:1-31)
 DDD 指定日期在當(dāng)年中的天數(shù)(范圍:1-366)
 DAY 指定日期在周中的名稱
 MON 返回指定日期的月份簡寫
 MONTH 返回指定日期的月份全稱
 YEAR/SYEAR 返回字符型年,此處s前綴與SCC處相同
 YYYY/SYYYY 返回?cái)?shù)字型年,此處s前綴與SCC處相同
 MM 返回指定日期的月份(范圍:1-12)
 HH 小時(范圍:1-12)
 HH12 小時(范圍:1-12)
 HH24 小時(范圍:0-23)
 MI 返回指定時間的分鐘(范圍0-59)
 SS 返回指定時間的秒數(shù)(范圍:0-59)
 FF[1-9] 返回毫秒數(shù),可指定長度1-9,默認(rèn)6位
 Y,YYY 返回有逗號分隔顯示的年
 I/IY/IYY/IYYY 返回ISO標(biāo)準(zhǔn)年
 Y/YY/YYY 以指定長度返回日期的年份
 W 返回指定日期在當(dāng)月中的第X周(范圍:1-5)
 WW 返回指定日期在當(dāng)年中的第X周(范圍:1-53)
 IW 指定日期在當(dāng)年中第X周(范圍:1-52或1-53(潤年))
 RM 以羅馬數(shù)字形式返回月份(范圍I-XII)
 Q 返回指定日期的季度(范圍:1-4)
 J 自公元前 4712 年1月1日到指定日期的總天數(shù)
  | 
總結(jié)
以上是生活随笔為你收集整理的Oracle格式化数字和日期的方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: autosys file watcher
 - 下一篇: instance of 泛型