1. 程式人生 > >oracle函式大全

oracle函式大全

F.1字元函式——返回字元值

(chr,concat,initcap,lower,lpad/rpad,nls_initcap,nls_lower,nls_upper,regexp_replace,regexp_substr,replace,trim/ltrim/rtrim,soundex,substr,translate,upper)

說明:可以sql和plsql中使用

CHR

語法:  chr(x)

功能:給出整數X,返回對應的ASCII碼字元。CHR和ASCII是一對反函式。

SQL> select chr(54740) 別名1,chr(65) 別名2 from dual;

別名1  別名2

趙       A

--------------------------------------------------

CONCAT

語法: CONCAT(string1,string2)

功能:連線兩個字串

SQL> select concat('010-','88888888')||'23'  連線 from dual;

連線

010-8888888823

--------------------------------------------------

INITCAP

語法:INITCAP(string)

功能:返回字元單詞首字母大寫,其餘小寫,單詞用空格和非字母字元分隔。

SQL> select initcap('smith hEllo') upp from dual;

UPP

Smith Hello

--------------------------------------------------

LOWER

    語法:LOWER(string)

     功能:所以字母小寫

     SQL> select lower('AaBbCcDd') AaBbCcDd from dual;

     AaBbCcDd

     aabbccdd

--------------------------------------------------

LPAD/RPAD

語法:LPAD/RPAD(string1,x[,string2])

功能:在string1字元左邊或右邊貼上數個string2字元,直到字元總位元組數達到x位元組。string2預設為空格。

如果string2的長度要比X字元少,就按照需要進行復制。如果string2多於X字元,則僅string2前面的X各字元被使用。如果string1長度大於x,則返回string1左端x個字元。

RPAD  在列的右邊貼上字元

LPAD  在列的左邊貼上字元

SQL> select lpad(rpad('gao',10,'*'),17,'*')from dual;

LPAD(RPAD('GAO',1

*******gao*******

不夠字元則用*來填滿

--------------------------------------------------

NLS_INITCAP

語法:NLS_INITCAP(string[,nlsparams])

功能:返回字串每個單詞第一個字母大寫而單詞中的其他字母小寫的string,nlsparams

指定了不同於該會話預設值的不同排序序列。如果不指定引數,則功能和INITCAP相同。Nlsparams可以使用的形式是:‘NLS_SORT=sort’ 這裡sort制訂了一個語言排序序列。

--------------------------------------------------

NLS_LOWER

語法:NLS_LOWER(string[,nlsparams])

功能:返回字串中的所有字母都是小寫形式的string。不是字母的字元不變。

Nlsparams引數的形式與用途和NLS_INITCAP中的nlsparams引數是相同的。如果nlsparams沒有被包含,那麼NLS_LOWER所作的處理和LOWER相同。

--------------------------------------------------

NLS_UPPER

語法:NLS_UPPER(string[,nlsparams])

功能:返回字串中的所有字母都是大寫的形式的string。不是字母的字元不變。nlsparams引數的形式與用途和NLS_INITCAP中的相同。如果沒有設定引數,則NLS_UPPER功能和UPPER相同。

使用位置:過程性語句和SQL語句。

--------------------------------------------------

REGEXP_REPLACE

語法:REGEXP_REPLACE(str1,pattem[,str2[,pos[,occ[,par]]]])

功能:10g新增函式,擴充套件了REPLACE函式的功能,並且用於按照特定正則表示式的規則替換字串。其中引數str1指定源字元表示式,pattem指定正則表示式,str2指定替換字串,pos指定起始搜尋位置,occ指定替換出現的第幾個字串,par指定預設匹配操作的文字串。

select REGEXP_REPLACE(a,’(.)’,’\1’) a from count;

A r g e n t i n a

體會NVL為DECODE,只支援NVL()內不再有其它括號()

select a,

       instr(upper(a), 'NVL(', 1) a3,

       instr(upper(a), ')',instr(upper(a), 'NVL(', 1),1) a4,

       substr(a,instr(upper(a), 'NVL(', 1),instr(upper(a), ')',instr(upper(a), 'NVL(', 1),1)-instr(upper(a), 'NVL(', 1)+1) a41,

       substr(a,instr(upper(a), 'NVL(', 1)+4,instr(upper(a), ')',instr(upper(a), 'NVL(', 1), 1)-instr(upper(a), 'NVL(', 1)-4) a5,

       REGEXP_REPLACE(

       substr(a,instr(upper(a), 'NVL(', 1)+4,instr(upper(a), ')',instr(upper(a), 'NVL(', 1), 1)-instr(upper(a), 'NVL(', 1)-4),

       '(.*),(.*)','\2,\1'

       ) a6,

       REGEXP_REPLACE(

       substr(a,instr(upper(a), 'NVL(', 1)+4,instr(upper(a), ')',instr(upper(a), 'NVL(', 1), 1)-instr(upper(a), 'NVL(', 1)-4),

       '(.*),(.*)','decode(\1,null,\2,'''',\2,\1)'

       ) a7,

       substr(a,1,instr(upper(a), 'NVL(', 1)-1)||REGEXP_REPLACE(

       substr(a,instr(upper(a), 'NVL(', 1)+4,instr(upper(a), ')',instr(upper(a), 'NVL(', 1), 1)-instr(upper(a), 'NVL(', 1)-4),

       '(.*),(.*)','decode(\1,null,\2,'''',\2,\1)'

       )||substr(a,instr(upper(a), ')',instr(upper(a), 'NVL(', 1), 1)+1) a8

  from temp_liut a;

--------------------------------------------------

判斷是否是數字

regexp_replace(a, '\d+', '') is null

REGEXP_SUBSTR

語法:REGEXP_SUBSTR(str1,pattem [,pos[,occ[,par]]])

功能:10g新增函式,擴充套件了SUBSTR函式的功能,並且用於按照特定表示式的規則返回字串的子串。其中引數str1指定源字元表示式,pattem指定規則表示式, pos指定起始搜尋位置,occ指定替換出現的第幾個字串,par指定預設匹配操作的文字串。

Select REGEXP_SUBSTR(‘http://www.oracle.com/products’,’http://([[:alnum:]]+\.?)’) a from dual;

a

http://www.oracle.com/

--------------------------------------------------

REPLACE

語法:REPLACE(string,search_str[,replace_str])

功能:把string中的所有的子字串search_str用可選的replace_str替換,如果沒有指定replace_str,所有的string中的子字串search_str都將被刪除。REPLACE是TRANSLATE所提供的功能的一個子集。

REPLACE('string','s1','s2')

string   希望被替換的字元或變數

s1       被替換的字串

s2       要替換的字串

SQL> select replace('he lohe you','he','i') from dual;

replace('he lohe you','he','i')

i loi you

--------------------------------------------------

TRIM/LTRIM/RTRIM

語法1:LTRIM/RTRIM(string1,[string2])

語法2:trim([string2] from string1)

語法1功能:中刪除從左/右邊算起出現在string1中的字元string2,string2如果是多個字元則逐個單字元比對刪除,tring2被預設設定為單個的空格。當遇到不在string2中的第一個字元,結果就被返回了;

語法2功能:刪除左右兩邊出現在string1中的字元string2,tring2必須為單字元,否則報錯。

select ltrim(rtrim('   gao qian jing   ',' '),' ') from dual;

gao qian jing

select ltrim('abaaaabbbcda','ab') from dual;

cda

select trim('a' from 'abacda') from dual;

bacd

--------------------------------------------------

SOUNDEX

語法:  SOUNDEX(string)

功能:  返回string的聲音表示形式.這對於比較兩個拼寫不同但是發音類似的單詞而言很有幫助,如果字元發音相同,則返回的結果會一致.

SOUNDEX 返回一個與給定的字串讀音相同的字串

SQL> create table table1(xm varchar(8));

SQL> insert into table1 values('weather');

SQL> insert into table1 values('wether');

SQL> insert into table1 values('gao');

SQL> select xm from table1 where soundex(xm)=soundex('weather');

XM

weather

wether

--------------------------------------------------

SUBSTR

語法:  SUBSTR(string,a[,b])

功能:擷取字串,從第a個開始取b個字元,這個務必要注意,是字元。 vachar2最長4000個位元組,GBK編碼中一箇中文字元佔2個位元組,韓文字元佔4個位元組,如果string是date或者number的資料型別,會自動轉化為varchar2。

SQL> select substr('13088888888',3,8) 擷取字串 from dual;

擷取字串

08888888

select SUBSTR(t.a,4),a from temp_liut t;

JAN-00  04-jan-00

--------------------------------------------------

TRANSLATE

語法:  TRANSLATE(string,from_str,to_str)

功能:  將字元string按照from_str與to_str的對應規則進行處理,返回將所出現的from_str中的每個字元替換為to_str中的相應字元以後的string. TRANSLATE是REPLACE所提供的功能的一個超集.如果from_str比to_str長,那麼在from_str中而不在to_str中而外的字元將從string中被刪除,因為它們沒有相應的替換字元. to_str不能為空.Oracle把空字串認為是NULL,並且如果TRANSLATE中的任何引數為NULL,那麼結果也是NULL.

Select TRANSLATE('2abc2234','01234abcde','99999XXXXX') tra from dual

9XXX9999

select replace(TRANSLATE('as中國fd1234','1234567890','0000000000'),'0') from dual;

查詢字串',01234,2342,2,'中逗號出現次數

select length(translate(',01234,2342,2,', 'a0123456789', ' ')) from dual;

判斷字串是否是數字

replace(translate(a, '0123456789', '0'),'0') is null

regexp_replace(a, '\d+', '') is null

UPPER

語法: UPPER(string)

功能: 所有字母大寫.(不是字母的字元不變.如果string是CHAR資料型別的,那麼結果也是CHAR型別的.如果string是VARCHAR2型別的,那麼結果也是VARCHAR2型別的).

 SQL> select upper('AaBbCcDd') upper from dual;

UPPER

AABBCCDD

--------------------------------------------------

F.2    字元函式——返回數字

(ascii,instr,instrb,length,lengthb,nls_sort)

說明:可以sql和plsql中使用

ASCII

語法:  ASCII(string)

功能: 返回string字串首字元的十進位制表示ascii碼值。 CHR和ASCII是互為相反的函式.CHR得到給定字元編碼的響應字元. ASCII得到給定字元的字元編碼.

SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from dual;

A         A      ZERO     SPACE

65        97        48        32

--------------------------------------------------

INSTR

語法:  INSTR(str1, str2[,a,b])

功能:  得到在str1中包含str2的位置. a>0,str1時從左邊開始檢查的,開始的位置為a;a<0,那麼str1是從右邊開始進行掃描的,開始的位置為a。第b次出現的位置將被返回. a和b都預設設定為1,這將會返回在string1中第一次出現string2的位置.如果string2在a和b的規定下沒有找到,那麼返回0.位置的計算是相對於string1的開始位置的,不管a和b的取值是多少.

INSTR(C1,C2,I,J) 在一個字串中搜索指定的字元,返回發現指定的字元的位置;

C1    被搜尋的字串

C2    希望搜尋的字串

I     搜尋的開始位置,預設為1(如果為負數會從後向前搜尋)

J     出現的位置,預設為1

SQL> select instr('oracle traning','ra',1,2) instring from dual;

INSTRING

9

--------------------------------------------------

INSTRB

語法:  INSTRB(string1, string2[a,[b]])

功能:  和INSTR相同,只是操作的對引數字元使用的位置的是位元組.

--------------------------------------------------

LENGTH

語法:  LENGTH(string)

功能:  返回字串的長度,特別注意的,對於空的欄位,返回為空,而不是0。

SELECT   LENGTH (' 130 ') 返回字串長度  FROM DUAL;

返回字串長度

5

--------------------------------------------------

LENGTHB

語法:  LENGTHB(string)

功能:  返回以位元組為單位的string的長度.對於單位元組字符集LENGTHB和LENGTH是一樣的.

--------------------------------------------------

NLS_SORT

語法: NLS_SORT(string[,nlsparams])

功能: 得到用於排序string的字串位元組.所有的數值都被轉換為位元組字串,這樣在不同資料庫之間就保持了一致性. Nlsparams的作用和NLS_INITCAP中的相同.如果忽略引數,會話使用預設排序.

--------------------------------------------------

F.3    數學函式

(abs,acos,asin,atan,atan2,ceil,cos,cosh,exp,floor,ln,log,mod,power,round,sign,sin,sinh,sqrt,tan,tanh,trunc)

說明:數學函式的輸入和輸出都是數字型,並且多數函式精確到38位。函式cos\cosh\exp\ln\log\sin\sinh\sqrt\tan\tanh精確到36位,acos\asin\atan\atan2精確到30為。數學函式可以在sql語句和plsql塊中引用。

ABS

語法:   ABS(x)

功能:   得到x的絕對值.

SQL> select abs(100),abs(-100) from dual;

ABS(100) ABS(-100)

100       100

--------------------------------------------------

ACOS

語法:  ACOS(x)

功能:  返回x的反餘弦值. 輸入x應該從-1到1之間的數,結果在0到pi之間,輸出以弧度為單位.

SQL> select acos(-1) from dual;

ACOS(-1)

3.1415927

--------------------------------------------------

ASIN

語法:  ASIN(x)

功能:  返回x的反正弦值. X的範圍應該是-1到1之間,返回的結果在-pi/2到pi/2之間,以弧度為單位.

SQL> select asin(0.5) from dual;

ASIN(0.5)

.52359878

--------------------------------------------------

ATAN

語法:  ATAN(x)

功能:  計算x的反正切值.返回值在-pi/2到pi/2之間,單位是弧度.

SQL> select atan(1) from dual;

ATAN(1)

.78539816

--------------------------------------------------

ATAN2

語法:  ATAN2(x,y)

功能: 返回x除以y的反正切值.結果在負的pi/2到正的pi/2之間,單位是弧度.

--------------------------------------------------

CEIL

語法:  CEIL(x)

功能:  計算大於或等於x的最小整數值.

SQL> select ceil(3.1415927) from dual;

CEIL(3.1415927)

      4

--------------------------------------------------

COS

語法:  COS(x)

功能:  返回x的餘弦值. x的單位是弧度.

SQL> select cos(-3.1415927) from dual;

COS(-3.1415927)

     -1

--------------------------------------------------

COSH

語法:  COSH(x)

功能:  計算x的雙曲餘弦值.

SQL> select cosh(20) from dual;

COSH(20)

242582598

--------------------------------------------------

EXP

語法:  EXP(x)

功能:  計算e的x次冪. e為自然對數,約等於2.71828.

SQL> select exp(2),exp(1) from dual;

EXP(2)    EXP(1)

7.3890561 2.7182818

--------------------------------------------------

FLOOR

語法:  FLOOR(x)

功能:  返回小於等於x的最大整數值.

SQL> SELECT   FLOOR (2345.67), FLOOR (-2345.67) FROM dual;

FLOOR(2345.67)   FLOOR (-2345.67)

  2345                        -2346

--------------------------------------------------

LN

語法:  LN(x)

功能:  返回x的自然對數. x必須是正數,並且大於0

SQL> select ln(1),ln(2),ln(2.7182818) from dual;

LN(1)     LN(2) LN(2.7182818)

0 .69314718     .99999999

--------------------------------------------------

LOG

語法:  LOG(x,y)

功能:  計算以x為底的y的對數.底必須大於0而且不等於1, y為任意正數.

SQL> select log(2,1),log(2,4) from dual;

LOG(2,1)  LOG(2,4)

0         2

--------------------------------------------------

MOD

語法:  MOD(x,y)

功能:  返回x除以y的餘數.如果y是0,則返回x

SQL> select mod(10,3),mod(3,3),mod(2,3) from dual;

MOD(10,3)  MOD(3,3)  MOD(2,3)

1         0         2

--------------------------------------------------

POWER

語法:  POWER(x,y)

功能:  計算x的y次冪.

POWER 返回n1的n2次方根

SQL> select power(2,10),power(3,3) from dual;

POWER(2,10) POWER(3,3)

1024         27

--------------------------------------------------

ROUND

語法:  ROUND(x[,y])

功能:  四捨五入函式,y預設值為0,x保留整數;y>0,x保留小數點右邊y位;y<0,x保留小數點左邊 |y| 位;可以對時間進行round,效果是隻保留年月日。

SELECT   ROUND (55.655, 2),   --55.66

         ROUND (55.654, 2),   --55.65

         ROUND (45.654, -1),  --50

         ROUND (45.654, -2),  --0

         ROUND (55.654, -2)   --100

  FROM   DUAL;

--------------------------------------------------

SIGN

語法:  SIGN(x)

功能:  檢測x的正負.如果x<0返回-1.如果x=0返回0.如果x>0返回1.

SQL> select sign(123),sign(-100),sign(0) from dual;

SIGN(123) SIGN(-100)   SIGN(0)

1         -1         0

常和decode 結合使用

--------------------------------------------------

SIN

語法:SIN(x)

功能:計算x的正弦值. X是一個以弧度表示的角度.

SQL> select sin(1.57079) from dual;

SIN(1.57079)

   1

--------------------------------------------------

SINH

語法:SINH(x)

功能:返回x的雙曲正弦值.

SQL> select sin(20),sinh(20) from dual;

SIN(20)  SINH(20)

.91294525 242582598

--------------------------------------------------

SQRT

語法:  SQRT(x)

功能:  返回x的平方根. x必須是正數.

SQL> select sqrt(64),sqrt(10) from dual;

SQRT(64)  SQRT(10)

8 3.1622777

--------------------------------------------------

TAN

語法:  TAN(x)

功能:  計算x的正切值, x是一個以弧度位單位的角度.

SQL> select tan(20),tan(10) from dual;

TAN(20)   TAN(10)

2.2371609 .64836083

--------------------------------------------------

TANH

語法:  TANH(x)

功能:  計算x的雙曲正切值.

SQL> select tanh(20),tan(20) from dual;

TANH(20)   TAN(20)

1 2.2371609

--------------------------------------------------

TRUNC

語法:  TRUNC(x[,y])

功能:  擷取數字函式,只舍不入函式, y預設值為0,x保留整數;y>0,x保留小數點右邊y位;y<0,x保留小數點左邊 |y| 位

SELECT   TRUNC (55.655, 2),   --55.65

         TRUNC (55.654, 2),   --55.65

         TRUNC (45.654, -1),  --40

         TRUNC (45.654, -2),  --0

         TRUNC (55.654, -2)   --0

  FROM   DUAL;

SELECT   TRUNC (SYSDATE, 'DD'),  --當天

         TRUNC (SYSDATE, 'MM'),  --本月第一天

         TRUNC (SYSDATE, 'yyyy'),  --本年第一天

         TRUNC (SYSDATE, 'day'),  --本週第一天

         TRUNC (SYSDATE, 'q')  --本季度第一天

  FROM   DUAL;

--------------------------------------------------

F.4  日期時間函式

(add_months,current_date,current_timestamp,dbtimesone,extract,from_tz,last_day,months_between,new_time,next_day,numtodsinternal,numtoyminternal,round,sys_extract_utc,sysdate,systimestamp,to_dsinternal,to_timestamp,to_timestamp_tz,to_yminternal,trunc,tz_offset)

說明:日期時間函式用於處理date和timestamp型別的資料,除了函式months_between返回數字外,其餘均返回date型別,Oracle以7位數字格式來存放日期資料,包括世紀、年、月、日、小時、分鐘、秒,並且預設日期顯式格式為“DD-MON-YY”。

ADD_MONTHS

語法:ADD_MONTHS(d,x)

功能:返回日期d加上x個月後的月份。x可以是任意整數。如果結果日期中的月份所包含的天數比d日期中的“日”分量要少。(即相加後的結果日期中的日分量資訊已經超過該月的最後一天,例如,8月31日加上一個月之後得到9月31日,而9月只能有30天)返回結果月份的最後一天。

使用位置:過程性語言和SQL語句。

SQL> select to_char(add_months(to_date('199912','yyyymm'),2),'yyyymm') from dual;

TO_CHA

200002

SQL> select to_char(add_months(to_date('199912','yyyymm'),-2),'yyyymm') from dual;

TO_CHA

199910

--------------------------------------------------

CURRENT_DATE

語法: CURRENT_DATE

功能:9i新增函式,返回當前會話時區所對應的日期時間。

select CURRENT_DATE from dual;

--------------------------------------------------

CURRENT_TIMESTAMP

語法:CURRENT_TIMESTAMP

功能:9i新增函式,返回當前會話時區所對應的日期時間。

select CURRENT_TIMESTAMP from dual;

--------------------------------------------------

DBTIMESONE

語法:DBTIMESONE

功能:9i新增函式,返回資料庫所在時區。

select DBTIMESONE from dual;

--------------------------------------------------

EXTRACT

語法: EXTRACT(s)

功能:9i新增函式,從日期時間值中取得所需要的特定資料

Select extract(year from sysdate) year from dual;

Yaer

2013

--------------------------------------------------

FROM_TZ

語法: FROM_TZ(s)

功能:9i新增函式,將特定時區的TIMESTAMP值轉換為TIMESTAMP WITH TIME ZONE值。

Select from_tz(timestamp ‘2013-03-28 08:00:00’,’3:00’);

--------------------------------------------------

LAST_DAY

語法:LAST_DAY(d)

功能:計算包含日期的d的月份最後一天的日期.這個函式可以用來計算當月中剩餘天數.

使用位置:過程性語言和SQL語句。

LAST_DAY

返回日期的最後一天

SQL> select to_char(sysdate,'yyyy.mm.dd') aa from dual;

aa

2004.05.09

SQL> select last_day(sysdate) from dual;

LAST_DAY(S

31-5月 -04

--------------------------------------------------

LOCALTIMESTAMP

語法:LOCALTIMESTAMP

功能:9i新增函式,返回當前會話時區的日期時間。

Select LOCALTIMESTAMP from dual;

--------------------------------------------------

MONTHS_BETWEEN

語法:MONTHS_BETWEEN(date1,date2)

功能:計算date1和date2之間相差的月數.如果date1<date2,則返回負數;如果date1,date2這兩個日期中日分量資訊是相同的,或者這兩個日期都分別是所在月的最後一天,那麼返回的結果是一個整數,否則包括一個小數,小數為富餘天數除以31,Oracle以每月31天為準計算結果。

SQL> select months_between('19-12月-1999','19-3月-1999') mon_between from dual;

MON_BETWEEN

  9

SQL>selectmonths_between(to_date('2000.05.20','yyyy.mm.dd'),to_date('2005.05.20','yyyy.dd')) mon_betw from dual;

MON_BETW

-60

--------------------------------------------------

NEW_TIME

語法:NEW_TIME(d,zone1,zone2)

功能:計算當時區zone1中的日期和時間是d時候,返回時區zone2中的日期和時間. zone1和zone2是字串. 給出在this時區=other時區的日期和時間。

使用位置:過程性語言和SQL語句。

NEW_TIME   (d,   ‘tz1’,   ‘tz2’)

d::一個有效的日期型變數

tz1   &   tz2::下表中的任一時區

時區1   時區2       說明

AST       ADT           大西洋標準時間

BST       BDT           白令海標準時間

CST       CDT           中部標準時間

EST       EDT           東部標準時間

GMT                     格林尼治標準時間

HST       HDT           阿拉斯加—夏威夷標準時間

MST       MDT           山區標準時間

NST                     紐芬蘭標準時間

PST       PDT           太平洋標準時間

YST       YDT           YUKON標準時間

SQL> select to_char(sysdate,'yyyy.mm.dd hh24:mi:ss') bj_time,to_char(new_time

2  (sysdate,'PDT','GMT'),'yyyy.mm.dd hh24:mi:ss') los_angles from dual;

BJ_TIME             LOS_ANGLES

2004.05.09 11:05:32 2004.05.09 18:05:32

--------------------------------------------------

NEXT_DAY

語法:NEXT_DAY(d,string)

功能: 給出日期d和星期string之後計算下一個星期的日期. String是星期幾;當前會話的語言指定了一週中的某一天.返回值的時間分量與d的時間分量是相同的. String的內容可以忽略大小寫.

使用位置:過程性語言和SQL語句。

NEXT_DAY(date,'day')

SQL> select next_day('18-5月-2001','星期五') next_day from dual;

NEXT_DAY

25-5月 -01

--------------------------------------------------

NUMTODSINTERNAL

語法:NUMTODSINTERNAL(n,char_expr)

功能:將數字n轉換為INTERNAL DAY TO SECOND格式, char_expr可以是DAY\HOUR\MINUTE或SECOND。

Select NUMTODSINTERNAL(1000,’minute’) from dual;

--------------------------------------------------

NUMTOYMINTERNAL

語法:NUMTOYMINTERNAL(n,char_expr)

功能:將數字n轉換為INTERVAL YEAR TO MONTH格式,char_expr可以是year或者month。

Select NUMTOYMINTERNAL(100,’MONTH’) from dual;

--------------------------------------------------

ROUND

語法:ROUND(d[,format])

功能:將日期d按照由format指定的格式進行四捨五入處理處理.如果沒有給format則使用預設設定`DD`.

使用位置:過程性語言和SQL語句。

Select round(sysdate,’MONTH’) from dual;

--------------------------------------------------

SYS_EXTRACT_UTC

語法:SYS_EXTRACT_UTC(date)

功能:返回特定時區時間所對應的格林威治時間。

Select SYS_EXTRACT_UTC(systimestamp) from dual;

--------------------------------------------------

SYSDATE

語法: SYSDATE

功能:取得當前的日期和時間,型別是DATE.它沒有引數.但在分散式SQL語句中使用時,SYSDATE返回本地資料庫的日期和時間.

使用位置:過程性語言和SQL語句。

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

--------------------------------------------------

SYSTIMESTAMP

語法:SYSTIMESTAMP

功能:9i新增函式,返回當前系統的日期時間及時區。

Select systimestamp from dual;

--------------------------------------------------

TO_DSINTERNAL

語法:TO_DSINTERNAL(char[,’nls_param’])

功能:9i新增函式,將符合特定日期和時間格式的字串轉變為INTERVAL DAY TO SECOND型別。

Select TO_DSINTERNAL(’58:10:10’) from dual;

--------------------------------------------------

TO_TIMESTAMP

語法:TO_TIMESTAMP(char[fmt[,’nls_param’]])

功能:9i新增函式,將符合特定日期和時間格式的字串轉變為TIMESTAMP型別。

select systimestamp from dual

1. 字元型轉成timestamp

Select TO_TIMESTAMP(’01-1月-03’) from dual;

select to_timestamp('01-10月-08 07.46.41.000000000 上午','dd-MON-yy hh:mi:ss.ff AM') 

from dual;

2. timestamp轉成date型

select cast(TO_TIMESTAMP('2015-10-01 21:11:11.328', 'yyyy-mm-dd hh24:mi:ss.ff') as date)

from dual;

3. date型轉成timestamp

select cast(sysdate as timestamp) date_to_timestamp

from dual;

--------------------------------------------------

TO_TIMESTAMP_TZ

語法:TO_TIMESTAMP_TZ(char[fmt[,’nls_param’]])

功能:9i新增函式,將符合特定日期和時間格式的字串轉變為TIMESTAMP WITH TIME ZONE型別。

Select TO_TIMESTAMP_TZ(’20130101’,’yyyymmdd’) from dual;

--------------------------------------------------

TO_YMINTERNAL

語法:TO_YMINTERNAL(char)

功能:9i新增函式,將符合特定日期和時間格式的字串轉變為INTERVAL YEAR TO MONTH型別。

select TO_TIMESTAMP('2015-10-01 21:11:11.328', 'yyyy-mm-dd hh24:mi:ss.ff') -

       TO_TIMESTAMP('2015-10-01 11:11:11.328', 'yyyy-mm-dd hh24:mi:ss.ff')

  from dual;

--------------------------------------------------

TRUNC

語法:TRUNC(d,format)

功能:截斷日期時間資料,計算截尾到由format指定單位的日期d.預設引數同ROUNG.

使用位置:過程性語言和SQL語句。如果fmt='mi'表示保留分,截斷秒,如此類推。

SQL> select to_char(trunc(sysdate,'hh'),'yyyy.mm.dd hh24:mi:ss') hh,

  2  to_char(trunc(sysdate,'mi'),'yyyy.mm.dd hh24:mi:ss') hhmm from dual;

HH                  HHMM

2004.05.09 11:00:00 2004.05.09 11:17:00

--------------------------------------------------

TZ_OFFSET

語法:TO_OFFSET(time_zone_name||sessiontimezone||dbtimezone)

功能:9i新增函式,返回特定時區與UTC相比的時區偏移。

Select TO_OFFSET (’EST’) from dual;

--------------------------------------------------

F.5   轉換函式

(asciistr,bin_to_num,cast,chartorowid,compose,convert,decompose,hextoraw, INTERVAL,rawtonhex,rowidtochar,rowidtonchar,scn_to_timestamp,timestamp_to_scn,to_char,to_clob,to_date,to_lob,to_label,to_multi_byte,to_nchar,to_number,to_single_byte,translate...using,unistr)

說明:用於將數值從一種資料型別轉換為另一種資料型別。

ASCIISTR

語法:ASCIISTR(s)

功能:9i新增函式,將任意字符集的字串轉變為資料庫字符集的ASCII字串。

Select ASCIISTR (’中國’) 中 from dual;

\4E2D\56FD

--------------------------------------------------

BIN_TO_NUM

語法:BIN_TO_NUM(expr[,expr]…)

功能:9i新增函式,用於將位向量值轉變為實際的數字值。

Select BIN_TO_NUM(1,0,1,1,1) 中 from dual;

23

--------------------------------------------------

CAST

語法:CAST(expr AS type_name)

功能:用於將一個內建資料型別或集合型別轉變為另一個內建資料型別或集合型別。可以作用於長度為0的空欄位檢視建表格之用。

Select cast(SYSDATE AS VARCHAR2) 中 from dual;

Create table tb_dual nologging as Select cast(null as varchar2(1)) from dual;

--------------------------------------------------

CHARTOROWID

語法:CHARTOROWID(string)

功能: 將字元資料型別轉換為ROWID型別,把包含外部格式的ROWID的CHAR或VARCHAR2數值轉換為內部的二進位制格式.引數string必須是包含外部格式的ROWID的18字元的字串.oracle7和oracle8中的外部格式是不同的.CHARTOROWID是ROWIDTOCHAR的反函式.

使用位置:過程性語言和SQL語句。

SQL> select rowid,rowidtochar(rowid),ename from scott.emp;

ROWID              ROWIDTOCHAR(ROWID) ENAME

AAAAfKAACAAAAEqAAA AAAAfKAACAAAAEqAAA SMITH

AAAAfKAACAAAAEqAAB AAAAfKAACAAAAEqAAB ALLEN

AAAAfKAACAAAAEqAAC AAAAfKAACAAAAEqAAC WARD

AAAAfKAACAAAAEqAAD AAAAfKAACAAAAEqAAD JONES

--------------------------------------------------

COMPOSE

語法:COMPOSE(string)

功能:9i新增函式,用於將輸入字串轉變為UNICODE字串值。

Select COMPOSE(‘o’||unistr(‘\0308’)) 中 from dual;

?

--------------------------------------------------

CONVERT

語法:CONVERT(string,dest_set[,source_set])

功能:將字串string從source_set所表示的字符集轉換為由dest_set所表示的字符集.如果source_set沒有被指定,它預設的被設定為資料庫的字符集.

使用位置:過程性語言和SQL語句。

SQL> select convert('中國','US7ASCII','WE8ISO8859P1') "conversion" from dual;

--------------------------------------------------

DECOMPOSE

語法:DECOMPOSE(string)

功能:9i新增函式,用於分解字串並返回相應的UNICODE字串。

Select COMPOSE(‘chateoux’) 中 from dual;

--------------------------------------------------

HEXTORAW

語法:HEXTORAW(string)

功能: 將string一個十六進位制構成的字串轉換為二進位制RAW數值. String中的每兩個字元表示了結果RAW中的一個位元組..HEXTORAW和RAWTOHEX為相反的兩個函式.

使用位置:過程性語言和SQL語句。

Select HEXTORAW (‘AB56’) 中 from dual;

--------------------------------------------------

INTERVAL

語法:INTERVAL 'integer [- integer]' {YEAR | MONTH} [(precision)][TO {YEAR | MONTH}]

功能:該資料型別常用來表示一段時間差, 注意時間差只精確到年和月. precision為年或月的精確域, 有效範圍是0到9, 預設值為2。

INTERVAL '123-2' YEAR(3) TO MONTH

表示: 123年2個月, "YEAR(3)" 表示年的精度為3, 可見"123"剛好為3為有效數值, 如果該處YEAR(n), n<3就會出錯, 注意預設是2.

INTERVAL '11:12:10.1234567' HOUR TO SECOND

表示:小時,秒

結果:+00 11:12:10.123457

INTERVAL '123' YEAR(3)

表示: 123年0個月

INTERVAL '300' MONTH(3)

表示: 300個月, 注意該處MONTH的精度是3啊.

INTERVAL '4' YEAR

表示: 4年, 同 INTERVAL '4-0' YEAR TO MONTH 是一樣的

INTERVAL '50' MONTH

表示: 50個月, 同 INTERVAL '4-2' YEAR TO MONTH 是一樣

INTERVAL '123' YEAR

表示: 該處表示有錯誤, 123精度是3了, 但系統預設是2, 所以該處應該寫成 INTERVAL '123' YEAR(3) 或"3"改成大於3小於等於9的數值都可以的

INTERVAL '5-3' YEAR TO MONTH + INTERVAL '20' MONTH =

INTERVAL '6-11' YEAR TO MONTH

表示: 5年3個月 + 20個月 = 6年11個月

RAWTONHEX

語法:RAWTONHEX(rawvalue)

功能:9i新增函式,將RAW類數值rawvalue轉換為一個相應的十六進位制表示的字串. rawvalue中的每個位元組都被轉換為一個雙位元組的字串. RAWTOHEX和HEXTORAW是兩個相反的函式.

使用位置:過程性語言和SQL語句。

Select rawtonhex(‘7D’) from dual;

--------------------------------------------------

ROWIDTOCHAR

語法:ROWIDTOCHAR(rowid)

功能:9i新增函式,將ROWID型別的數值rowid轉換為varchar2的字串表示,在oracle7和oracle8之間有些不一樣的地方. ROWIDTOCHAR和CHARTOROWID是兩個相反的函式.

使用位置:過程性語言和SQL語句。

--------------------------------------------------

ROWIDTONCHAR

語法:ROWIDTOCHAR(rowid)

功能:9i新增函式,將ROWID型別的數值rowid轉換為Nvarchar2的字串表示,在oracle7和oracle8之間有些不一樣的地方. ROWIDTOCHAR和CHARTOROWID是兩個相反的函式.

使用位置:過程性語言和SQL語句。

--------------------------------------------------

SCN_TO_TIMESTAMP

語法:SCN_TO_TIMESTAMP(number)

功能:10g新增函式,根據輸入的scn值返回對應的大概日期時間,其中number用於指定scn值.

使用位置:過程性語言和SQL語句。

Select SCN_TO_TIMESTAMP(ora_rowscn) from emp;

--------------------------------------------------

TIMESTAMP_TO_SCN

語法:TIMESTAMP_TO_SCN(timestamp)

功能:10g新增函式,用於根據輸入的timestamp返回所對應的scn值,其中timestamp、用於指定日期時間。

使用位置:過程性語言和SQL語句。

Select TIMESTAMP_TO_SCN(order_date) from emp;

--------------------------------------------------

TO_CHAR

語法1:TO_CHAR(character)

功能1:用於將NCHAR,NVARCHAR2,CLOB,NCLOB資料轉變為資料庫字符集資料,當用於NCHAR,NVARCHAR2,NCLOB時字元用單引號括起來,前面加上n。

Select to_char(n’中國’) from dual;

語法2:TO_CHAR(d [,format[,nlsparams]])

功能2:將日期d轉換為一個VARCHAR2型別的字串.format指定日期格式,.如果沒有給定format,使用的就是該會話的預設日期格式.nlsparams指定NLS引數. nlsparams的格式是:“NLS_DATE_LANGUAGE”

使用位置:過程性語言和SQL語句。

select to_char(sysdate,'yyyy/mm/dd hh24:mi:ss') from dual;

2004/05/09 21:14:41

語法3:TO_CHAR(labels[,format])

功能3:將MISLABEL的LABEL轉換為一個VARCHAR2型別的變數.

使用位置:在trusted資料庫的過程性語句和SQL語句。

語法4: TO_CHAR(num[,format[,nlsparams]])

功能4:將NUMBER型別的引數num轉換為一個VARCHAR2型別的變數.如果指定了format,那麼它會控制這個轉換處理.表5-5列除了可以使用的數字格式.如果沒有指定format,它會控制這個轉換過程.下面列出了可以使用的數字格式.如果沒有指定format,那麼結果字串將包含和num中有效位的個數相同的字元. nlsparams用來指定小數點和千分位分隔符和貨幣符號.可以使用的格式:`NLS_NUMERIC_CHARS=”dg”NLS_CURRENCY=”string”

d和g分別表示列小數點和千分位分隔符. String表示了貨幣的符號.例如,在美國小數點分隔符通常是一個句點(.),分組分隔符通常是一個逗號(,),而千分位符號通常是一個$.

使用位置:過程性語言和SQL語句。

SELECT TO_CHAR(TO_DATE('11-oct-2007'), 'fmDdthsp "of" Month, Year') FROM DUAL;

以上正確,需要注意的是不屬於轉換日期格式識別符號需要使用雙引號,如上面的"of"

SELECT promo_name, TRIM(TO_CHAR(promo_end_date,'Day')) ||', '||

                   TRIM(TO_CHAR(promo_end_date,'Month')) ||' '||

                   TRIM(TO_CHAR(promo_end_date,'DD, YYYY')) AS last_day

       FROM promotions;

等價於下面,fm有trim的作用去掉多餘空格

SELECT promo_name,TO_CHAR(promo_end_date,'fmDay')||','||

                  TO_CHAR(promo_end_date,'fmMonth')||' '||

                  TO_CHAR(promo_end_date,'fmDD, YYYY') AS last_day

       FROM promotions;

上述當中,Day\DAY\day等等轉換後都是帶空格的,而YYYY則不會。

--將number格式轉換為貨幣格式,前面均帶空格

select TO_CHAR(12345,'$99999D99') from dual;-- $12345.00

SELECT TO_CHAR(1890.55,'$00G000D00') FROM DUAL;-- $01,890.55

SELECT TO_CHAR(1890.55,'$99G999D99') FROM DUAL;--   $1,890.55

--------------------------------------------------

TO_CLOB

語法:TO_CLOB (char)

功能:9i新增函式,將字串轉變為CLOB型別。Char引數使用NCHAR,NVARCHAR2,NCLOB型別,字串需要單引號括起來,且在前面加上n.

Select TO_CLOB(n’中國’) from dual;

--------------------------------------------------

TO_DATE

語法:TO_DATE(String[,format[,nlsparams]])

功能:將符合特定日期格式的字串轉變為date型別. format是一個日期格式字串.當不指定format的時候,使用該會話的預設日期格式,需要特別注意的,預設格式並不適用'2015-03-03'這種形式。

Select to_date(‘20130101’,’yyyymmdd’) from dual;--正確

SELECT TO_DATE('01/JANUARY/2007') FROM DUAL;--正確,預設支援

SELECT TO_DATE('01-JANUARY-2007') FROM DUAL;--正確,預設支援

SELECT TO_DATE('2015-03-03') FROM DUAL;--錯誤,預設不支援

--------------------------------------------------

TO_LOB

語法:TO_LOB (long_column)

功能:9i新增函式,將LONG或LONG ROW列的資料轉變為相應的LOB型別。但需要注意的是,在單純的select語句中會報錯,如例子所示。

使用位置:過程性語言和SQL語句。

例子:to_lob轉化long

select VIEW_NAME,to_lob(text) text from user_views;  --會報錯

create table temp_liutao nologging as select VIEW_NAME,to_lob(text) text from user_views  --通過

--------------------------------------------------

TO_LABEL

語法:TO_LABEL(String[,format])

功能:將String轉換為一個MLSLABEL型別的變數. String可以是VARCHAR2或者CHAR型別的引數.如果指定了format,那麼它就會被用在轉換中.如果沒有指定format,那麼使用預設的轉換格式.

使用位置:過程性語言和SQL語句。

--------------------------------------------------

TO_MULTI_BYTE

語法:TO_MULTI_BYTE(String)

功能:計算所有單位元組字元都替位換位等價的多位元組字元的String.該函式只有當資料庫字符集同時包含多位元組和單位元組的字元的時候有效.否則, String不會進行任何處理. TO_MULTI_BYTE和TO_SINGLE_BYTE是相反的兩個函式.

使用位置:過程性語言和SQL語句。

SQL>  select to_multi_byte('高') from dual;

TO

--------------------------------------------------

TO_NCHAR

語法1:TO_NCHAR(char)

功能1:將字串由資料庫字符集轉變為民族字符集。

SQL>  select TO_NCHAR ('高') from dual;

語法2:TO_NCHAR(date,[,fmt[,nls_param]])

功能2:將日期時間值轉變為民族字符集。

SQL>  select TO_NCHAR (sysdate) from dual;

語法3:TO_NCHAR(number)

功能3:將數字值轉變為民族字符集。

SQL>  select TO_NCHAR (10) from dual;

--------------------------------------------------

TO_NUMBER

語法: TO_NUMBER(String[,format[,nlsparams]])

功能:將CHAR或者VARCHAR2型別的String轉換為一個NUMBER型別的數值.如果指定了format,那麼String應該遵循相應的數字格式. Nlsparams的行為方式和TO_CHAR中的完全相同.TO_NUMBER和TO_CHAR是兩個相反的函式.

使用位置:過程性語言和SQL語句。

SQL> select to_number('1999') year from dual;

     YEAR

     1999

--------------------------------------------------

TO_SINGLE_BYTE

語法: TO_SINGLE_BYTE(String )

功能:計算String中所有多位元組字元都替換為等價的單位元組字元.該函式只有當資料庫字符集同時包含多位元組和單位元組的字元的時候有效.否則, String不會進行任何處理.

TO_MULTI_BYTE和TO_SINGLE_BYTE是相反的兩個函式.

使用位置:過程性語言和SQL語句。

Select TO_SINGLE_BYTE(‘a b c’) from dual;

--------------------------------------------------

TRANSLATE…USING

語法: TRANSLATE(str1 USING zfj)

功能:將字串轉變為資料庫字符集(char_cs)或民族字符集(nchar_cs)

Select TRANSLATE(‘中國’ using nchar_cs) from dual;

--------------------------------------------------

UNISTR

語法: UNISTR(str1)

功能:9i新增函式,輸入字串返回相應的UNICODE字元

Select UNISTR (‘\00D6’) from dual;

--------------------------------------------------

F.6  分組統計函式

(avg,corr,count,covar_pop,covar_samp,cume_dist,dense_rank,first,group_id,grouping,grouping_id,glb,last,listagg,lub,max,min,percent_rank,percentile_cont,percentile_disc,rank,stddev,stddev_pop,stddev_samp,sum,var_pop,var_samp,variance)

說明:分組函式也被稱為多行函式,它會根據輸入的多行資料返回一個結果。主要用於執行資料統計或彙總操作,並且分組函式只能出現在select語句選擇列表、order by子句和having子句中。注意分組函式不能直接在plsql中引用,只能在內嵌select語句中使用。

AVG

語法:AVG([DISTINCT|ALL]col)

功能:返回一列資料的平均值,預設使用是ALL修飾符,all表示對所有的值求平均值,distinct排重後再求平均值

使用位置:查詢列表和GROUP BY子句.

SQL> select avg(distinct sal) from gao.table3;

AVG(DISTINCTSAL)

         3333.33

SQL> select avg(all sal) from gao.table3;

AVG(ALLSAL)

    2592.59

--------------------------------------------------

CORR

語法:CORR([expr1,expr2)

功能:返回成對數值的相關係數,其數值使用表示式”covar_pop(expr1,expr2)/(stddev_pop(expr1)*stddev_pop(expr2))”

使用位置:查詢列表和GROUP BY子句.

SQL> select corr(list_,min_) from gao.table3;

--------------------------------------------------

COUNT

語法:COUNT(*|[DISTINCT|ALL] col)

功能:得到查詢中行的數目.如果使用了*獲得行的總數.如果在引數中傳遞的是選擇列表,那麼計算的是非空數值。我基於10G測試,有主鍵情況下,count(主鍵)最快,count(1)和count(*)調動主鍵統計,時間上一樣;無主鍵情況下count(索引列)最快,但需要注意count(列名)統計不包括null,count(常量)和count(*)包括null

Select count(distinct sal) from emp;

--------------------------------------------------

COVAR_POP

語法:COVAR_POP(expr1,expr2)

功能:返回成對數字的協方差,其數值使用表示式”(sum(expr1*expr2)-sum(expr1)*sum(expr2)/n)/n”

Select COVAR_POP(column1,column2) from emp;

--------------------------------------------------

COVAR_SAMP

語法:COVAR_SAMP(expr1,expr2)

功能:返回成對數字的協方差,其數值使用表示式”(sum(expr1*expr2)-sum(expr1)*sum(expr2)/n)/n-1”

Select COVAR_SAMP(column1,column2) from emp;

--------------------------------------------------

CUME_DIST

語法:CUME_DIST(expr1,expr2…) within group (order by expr1,expr2…)

功能:返回特定數值在一組行資料中的累積分佈比例。

Select CUME_DIST(2000) within group (order by sel) from emp;

--------------------------------------------------

DENSE_RANK

語法:DENSE_RANK(expr1,expr2…) within group (order by expr1,expr2…)

功能:返回特定資料在一組行資料中的等級。

Select DENSE_RANK (5000) within group (order by sel) from emp;

--------------------------------------------------

FIRST

語法:FIRST

功能:9i新增,不能單獨使用,必須與其他分組函式結合使用。通過使用該函式,可以取得排序等級的第一級,然後然後使用分組函式彙總該等級的資料。

Select min(sal) keep (dense_rank first order by comm desc) from emp;

--------------------------------------------------

GROUP_ID

語法:GROUP_ID

功能:9i新增,用於區分分組結果中的重複行。

Select deptno,job,avg(sal),group_id() from emp group by deptno,rollup(deptno,job);

--------------------------------------------------

GROUPING

語法:GROUPING(expr)

功能:用於確定統計結果是否使用了特定的表示式,返回0則用到了表示式,1則未用。

例如:select corp_code,org_level,count(1),

       grouping(corp_code),

       grouping(org_level)

  from tb_sys_organization

group by rollup(corp_code, org_level);

select case grouping(corp_code)

         when 1 then 'all_corp' else corp_code end corp_code,

       case grouping(org_level)

         when 1 then 'all_org' else org_level end org_level,

       count(1)

  from tb_sys_organization

group by rollup(corp_code, org_level);

--------------------------------------------------

GROUPING_ID

語法:GROUPING_ID(expr1[,expr2]…)

功能:9i新增,用於返回對應於特定行的grouping位向量的值。

Select deptno,job,sum(sal),grouping_id(job,deptno) from emp group by rollup(deptno,jon)

--------------------------------------------------

GLB

語法:GLB ([DISTINCT|ALL]label)

功能:獲得由label界定的最大下界.函式僅用於trusted oracle.

使用位置:trusted資料庫的選擇列表和GROUP BY子句.

--------------------------------------------------

LAST

語法:LAST

功能:9i新增,不能單獨使用,必須與其他分組函式結合使用。通過使用該函式,可以取得排序等級的最後一級,然後使用分組函式彙總該等級的資料。

Select min(sal) keep (dense_rank last order by comm) from emp;

--------------------------------------------------

LISTAGG

語法:listagg

功能:列轉行

select listagg(o.rybs, ';') within group(order by o.rybs)

  from gk_xszrr o

 where rownum <= 100;

----------------------------------------------------

LUB

語法:LUB ([DISTINCT|ALL]label)

功能:獲得由label界定的最小上界.用於trusted oracle.資料庫.

使用位置:trusted資料庫的選擇列表和GROUP BY子句.過程性語言和SQL語句。

--------------------------------------------------

MAX

語法:MAX([DISTINCT|ALL]col)

功能:獲得選擇列表或表示式的最大值,ALL表示對所有的值求最大值,DISTINCT表示對不同的值求最大值,相同的只取一次

使用位置:僅用於查詢選擇和GROUP BY子句.

SQL> select max(distinct sal) from scott.emp;

MAX(DISTINCTSAL)

            5000

--------------------------------------------------

MIN

語法:MIN([DISTINCT|ALL]col)

功能:獲得選擇列表或表示式的最小值,ALL表示對所有的值求最小值,DISTINCT表示對不同的值求最小值,相同的只取一次

使用位置:僅用於查詢選擇和GROUP BY子句.

SQL> select min(all sal) from gao.table3;

MIN(ALLSAL)

    1111.11

--------------------------------------------------

PERCENT_RANK

語法:PERCENT_RANK(expr1,expr2…)WITHIN GROUP (ORDER BY expr1,expr2…)

功能:該函式用於返回特定數值在統計級別中所佔的比例。

SQL> select percent_rank(3000) within group(order by sal) from emp;

--------------------------------------------------

PERCENTILE_CONT

語法:PERCENTILE_CONT(percent_expr)WITHIN GROUP (ORDER BY expr)

功能:9i新增,用於返回在統計級別中處於某個百分點的特定數值(按照連續分佈模型確定)。

SQL> select percentile_cont(.6) within group(order by sal) from emp;

--------------------------------------------------

PERCENTILE_DISC

語法:PERCENTILE_DISC(percent_expr)WITHIN GROUP (ORDER BY expr)

功能:9i新增,用於返回在統計級別中處於某個百分點的特定數值(按照離散分佈模型確定)。

SQL> select percentile_cont(.6) within group(order by sal) from emp;

--------------------------------------------------

RANK

語法:RANK(expr1,expr2…)WITHIN GROUP (ORDER BY expr1,expr2…)

功能:該函式用於返回特定數值中所佔據的等級。

SQL> select rank(3000) within group(order by sal) from emp;

--------------------------------------------------

STDDEV

語法:STDDEV([DISTINCT|ALL]col)

功能:獲得選擇列表的標準差.標準差為方差(VARIANCE)的平方根, ALL表示對所有的值求標準差,DISTINCT表示只對不同的值求標準差.

使用位置:僅用於查詢選擇和GROUP BY子句.

SQL> select stddev(sal) from scott.emp;

STDDEV(SAL)

  1182.5032

SQL> select stddev(distinct sal) from scott.emp;

STDDEV(DISTINCTSAL)

           1229.951

--------------------------------------------------

STDDEV_POP

語法:STDDEV_POP(col)

功能:返回統計標準差,其數值是統計方差的平方根.

使用位置:僅用於查詢選擇和GROUP BY子句.

SQL> select stddev_pop(sal) from scott.emp;

--------------------------------------------------

STDDEV_SAMP

語法:STDDEV_SAMP(col)

功能:返回取樣標準差,其數值是取樣方差的平方根.

SQL> select stddev_samp(sal) from scott.emp;

--------------------------------------------------

SUM

語法:SUM([DISTINCT|ALL]col)

功能:返回選擇的數值和總和

使用位置:僅用於查詢選擇和GROUP BY子句.

Select sum(sal) from emp;

--------------------------------------------------

VAR_POP

語法:VAR_POP([DISTINCT|ALL]col)

功能:返回統計方差.使用公式為(sum(expr*expr)-sum(expr)*sum(expr)/count(expr))/(count(expr)

使用位置:僅用於查詢選擇和GROUP BY子句.

SQL> select VAR_POP (sal) from scott.emp;

--------------------------------------------------

VAR_SAMP

語法:VAR_SAMP([col)

功能:返回取樣方差.使用公式為(sum(expr*expr)-sum(expr)*sum(expr)/count(expr))/(count(expr-1)

使用位置:僅用於查詢選擇和GROUP BY子句.

SQL> select variance(sal) from scott.emp;

--------------------------------------------------

VARIANCE

語法:VARIANCE([DISTINCT|ALL]col)

功能:返回選擇列或表示式的取樣方差.使用公式為(sum(expr*expr)-sum(expr)*sum(expr)/count(expr))/(count(expr-1)

使用位置:僅用於查詢選擇和GROUP BY子句.

SQL> select variance(sal) from scott.emp;

VARIANCE(SAL)

    1398313.9

--------------------------------------------------

分組函式,除了count(*),count(1),其他分組函式都會忽略null行,包括count(列名)。

--------------------------------------------------

F.7  集合函式

(cardinality,collect,powermultiset,powermultiset_by_cardinality,set)

說明:10g新增,為了擴充套件集合型別(巢狀表和VARRAY)的功能,新增的針對集合型別的函式。

CARDINALITY

語法:CARDINALITY (nested_table)

功能:10g新增函式,返回巢狀表的實際元素個數。

SQL> select product_id,CARDINALITY(ad_text) from a;

--------------------------------------------------

COLLECT

語法:COLLECT (column)

功能:10g新增函式,用於根據輸入列和被選中行建立巢狀表結果。

SQL> select cast(COLLECT(ad_text) as t) from a;--t是巢狀表

--------------------------------------------------

POWERMULTISET

語法:POWERMULTISET(expr)

功能:10g新增函式,用於生成巢狀表的超集(包含所非空的巢狀表)。

SQL> select cast(POWERMULTISET (ad_text) as t) from a;--t是巢狀表

--------------------------------------------------

POWERMULTISET_BY_CARDINALITY

語法:POWERMULTISET_BY_CARDINALITY(expr,cardinatility)

功能:10g新增函式,用於根據巢狀表和元素個數,生成巢狀表的超集(包含所非空的巢狀表)。

SQL> select cast(POWERMULTISET_BY_CARDINALITY(ad_text) as t) from a;--t是巢狀表

--------------------------------------------------

SET

語法:SET(nested_table)

功能:改函式用於取消巢狀表中的重複結果,並生成新的巢狀表。

SQL> select SET(nested_table) from a;

--------------------------------------------------

F.8  物件函式

(deref,make_ref,ref,reftohex,value)

說明:物件函式用於操縱REF物件。REF物件實際是指物件型別資料的指標。

DEREF

語法:DEREF(expr)

功能:該函式用於返回參照物件exp所引用的物件例項。

SQL> select DEREF(address).city from table_name;

--------------------------------------------------

MAKE_REF

語法:MAKE_REF(object_table|object_view,key)

功能:該函式可以基於物件檢視或物件表(存在基於主鍵的物件識別符號)的一行資料建立REF。

SQL> select MAKE_REF(oc_inventocies,3003) from dual;

--------------------------------------------------

REF

語法:REF(expr)

功能:該函式用於返回物件行所對應的REF值。

SQL> select REF(e) from table_name e;

--------------------------------------------------

REFTOHEX

語法:REFTOHEX(expr)

功能:該函式用於將REF值轉變為十六進位制字串。

SQL> select REFTOHEX(REF(e)) from table_name e;

--------------------------------------------------

VALUE

語法:VALUE(expr)

功能:該函式用於返回行物件所對應的物件例項資料,其中expr用於指定行物件的別名。

SQL> select value(e).city from table_name e;

--------------------------------------------------

F.9  其他函式

(bfilename,coalesce,decode,depth,dump,empty_clob/empty_blob,existsnode,extract,extractvalue,greatest,greatest_lb,least,least_ub,nls_charset_decl_len,nls_charser_id,nls_charser_name,nullif,nvl2,over,path,sys_connect_by_path,sys_context,sys_dburigen,sys_guid,sys_typeid,sys_xmlagg,sys_xmlgen,uid,updatexml,user,userenv,vsize,xmlagg,xmlcolatival,xmlconcat,xmlelement,xmlforest,xmlsequence,xmltransform)

說明:除了上述涉及的函式外,Oracle還提供了一些單行函式。

BFILENAME

語法: BFILENAME(directory,file_name)

功能:獲得作業系統中與物理檔案file_name相關的BFILE位置指示符. Directory是與OS路徑相關的DIRECTORY型別物件,file_name是OS檔案的名稱。

使用位置:過程性語言和SQL語句。

SQL>insert into file_tb1 values(bfilename('lob_dir1','image1.gif'));

--------------------------------------------------

COALESCE

語法:COALESCE(exp1,exp2,exp3,...)

功能:9i新增,依次查詢各引數,遇到非NULL則返回,各引數或表示式資料型別必須一致,如果都為null則返回null。

Select COALESCE(v_e1,v_e2) from a;

--------------------------------------------------

DECODE

語法:DECODE(base_expr,comparel,valuel,Compare2,value2,…default)

功能:把base_expr與後面的每個compare(n)進行比較,如果匹配返回相應的value (n).如果沒有發生匹配,則返回default,每個valuel資料型別必須一致,如果沒有default則返回null。

Select decode(a,’金’,1,’銀’,2,0) from table_name;

--------------------------------------------------

DEPTH

語法:DEPTH(n)

功能:9i新增,用於返回xml方案under_path路徑所對應的相對層數,其中引數n用於指定相對層數。

Select fath(1),depth(2) from a;

--------------------------------------------------

DUMP

語法:DUMP(expr[,number_format[,start_position][,length]])

功能:獲得有關expr的內部表示資訊的VARCHAR2型別的數值. number_format指定了按照下面返回數值的基數(base):

number_format    結