Oracle格式化數字和日期的方法

2021-06-05 20:43:43 字數 4443 閱讀 9939

to_char,函式功能,就是將數值型或者日期型轉化為字元型。

比如最簡單的應用:

/*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

上面的結果 '.123' 在大多數情況下都不是我們想要的結果,我們想要的應該是 '0.123'。

我們來看一下to_char函式的具體用法:

to_char( n [, fmt [, 'nlsparam']] )
該函式將number型別的n按數值格式fmt轉換成varchar2型別的值。

'nlsparams'指定由數值格式的元素返回的字元,包括:

.小數點字元

.組分隔符

.本地錢幣符號

.國際錢幣符號

變元的形式為:

'nls_numeric_characters="dg" nls_currency="tcxt" nls_iso_currency=territory'

其中d為小數點字元,g為組分隔符。

例 :to_char (17145,

'l099g999',

'nls_numeric_characters=".," nls_currency="nud"')=nud017,145

通過上面的了解,再檢視fmt的一些格式,我們可以用以下表示式得到'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、小數點最多4位,最少保留2位。

1--->'1.00';1.1--->'1.00';1.12-->'1.12';1.1234--->'1.1234';

1.12345--->'1.1235'

最終實現如下:

/* fm :除空格  

9999999.0099:允許小數點左邊最大正數為7位,小數點右邊最少2位,最多4位,且在第5位進行四捨五入

*/select

to_char(123.0233,

'fm9999999.0099') 

from

dual

格式串 說明及示例

. 按指定格式顯示小數點及小數點後位置(指定數字沒有小數的話,以0補足)

$ 字元前附加$符

0 字元頭部或尾部附加0

9 與上類似以指定長度返回數值格式,不過如果被格式化的數值長度短於指定格式,則以空格補足。

b 當整數部分是0時返回空格(即使存在0格式串也忽略)。

c 返回iso預設指定的標識(預設標識可參見:nls_iso_currency)

d 返回指定的小數點形式(預設符:.)(預設標識可參見:nls_numeric_character)

eeee 使用科學記數法顯示

g 與逗號功能類似,用指定字元分隔字串(預設符:,)(預設標識可參見:nls_numeric_character)。

l 指定位置顯示本地預設符號(預設值見:nls_currency)

mi 負值在尾部顯示-號,正值在尾部附加空格。另:該格式符必須處於格式串尾部

pr 負值以<>尖括號包括,正值在頭尾部各附加空格。另:該格式符必須處於格式串尾部

rn/rn 返回羅馬數字形式。注:大寫格式串返回大寫羅馬數字,小寫格式串返回小寫羅馬數字:)

s 顯示數值正負值符號。可出現於格式串首部或尾部。

tm 字元格式轉換(標準數值與科學計數法),可以通過附加9或e控制輸出,預設是tm9,如果輸出超過64個字元,則資料庫自動轉換成科學計數法顯示。該格式串不能與其它的數值型格式串同時使用。

u 與l類似,在指定位置顯示貨幣單位(預設值見:nls_dual_currency)

v 數值+10的n次方,n=v後9的個數

x 返回指定數值對應的16進製制數,必須是正數。如果指定數值非整的話,oracle會自動round取整。

例如:

sql> select to_char(16,¨***x¨) from dual;

to_ch

-----

===(2)日期及時間格式續

[君三思] 2007-12-14

sssss 返回自午夜到指定時間共逝去的秒數(範圍:0-86399)

dl 根據資料庫nls_date_format引數中的設定及nls_language,nls_territory引數中的格式返回長日期形式,有點兒繞,呵呵你試試就知道了

ds 與上相同返回短日期形式

ts 與dl,ds引數類似,不過ts返回的是時間

dy 返回日期簡寫

rr rr 引數與yy引數很類似,但取值規則略有不同:

rrrr 輸入值可以是2位也可以是4位,2位時規則與rr完全相同。

fm 填充模式。

oracle 預設使用空白字元填充被格式化的元素,確保寬度一致。例如:

如上例可以看到,不管幾月份,其返回所佔長度是一致的。

fx 精確匹配。使用fx引數之後:

x 本地的預設分隔符

以下四項為時區相關引數, 明確表示某乙個時區,應該聯合使用 tzh tzm 或者 tzr tzd

tzd /tzr

tzh/tzm

1、 與指定日期在同一周,周1的日期是:

2、 指定日期當月最後乙個星期天:

3、 今年第127天是幾號:

(1)日期及時間格式

[君三思] 2007-12-13

經常遇到有朋友問詢關於日期時間格式化的問題(或可以通過格式化輕易解決),經過參考oracle sql reference官方文件,並附上詳細的應用示例綜合成文,希望能夠對大家學習和使用有所幫助。本篇可視為"oracle著名及非著名函式介紹"的補充!

環境:

格式串 說明及示例

-/,.;: 指定返回字串分隔符

ad/a.d. 公元標識

bc/b.c. 公元標識

公元 2007-12-14

am/a.m. 子午線標識

pm/p.m. 子午線標識

cc/scc 世紀標識,s字首指定如遇西元前的顯示,會在顯示前加(-)

d 指定日期在週中的數值(範圍:1-7)

dd 指定日期在當月中的天數(範圍:1-31)

ddd 指定日期在當年中的天數(範圍:1-366)

day 指定日期在週中的名稱

mon 返回指定日期的月份簡寫

與dy同,中文看不出簡寫效果。

month 返回指定日期的月份全稱

year/syear 返回字元型年,此處s字首與scc處相同

yyyy/syyyy 返回數字型年,此處s字首與scc處相同

mm 返回指定日期的月份(範圍:1-12)

hh 小時(範圍:1-12)

hh12 小時(範圍:1-12)

hh24 小時(範圍:0-23)

mi 返回指定時間的分鐘(範圍0-59)

ss 返回指定時間的秒數(範圍:0-59)

ff[1-9] 返回毫秒數,可指定長度1-9,預設6位

y,yyy 返回有逗號分隔顯示的年

i/iy/iyy/iyyy 返回iso標準年

y/yy/yyy 以指定長度返回日期的年份

w 返回指定日期在當月中的第x周(範圍:1-5)

ww 返回指定日期在當年中的第x周(範圍:1-53)

iw 指定日期在當年中第x周(範圍:1-52或1-53(潤年))

rm 以羅馬數字形式返回月份(範圍i-xii)

q 返回指定日期的季度(範圍:1-4)

j 自西元前 4712 年1月1日到指定日期的總天數

Oracle日期格式化

select 1 as fld tm cartons to char sysdate 1,month dd yyyy as fld order no,nvl ps.wmps grossweight,0 as grossweight nvl ps.wmps cubic,0 from 表 我要在sele...

Oracle 格式化日期

start 所謂格式化日期指的是將日期轉為字串,或將字串轉為日期,下面幾個函式可以用來格式化日期。to char datetime,format to date character,format to timestamp character,format to timestamp tz charac...

Oracle 格式化數字

start 所謂格式化數字指的是將數字轉為字串,或將字串轉為數字,下面幾個函式可以用來格式化數字。to char number,format to number character format to binary float character format to binary double ch...