1. 程式人生 > 實用技巧 >oracle常用函式

oracle常用函式

字元函式

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;

 
*******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指定預設匹配操作的文字串.

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

A r g e n t i n a

判斷是否是數字
regexp_replace(a, '\d+', '') is null

REGEXP_SUBSTR

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

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

SQL> 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

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

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

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

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


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

gao qian jing

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

cda

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

bacd

SOUNDEX

語法: SOUNDEX(string)

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

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

create table table1(xm varchar(8));

insert into table1 values('weather');

insert into table1 values('wether');

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

SQL> 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.


SQL> select TRANSLATE('2abc2234','01234abcde','99999XXXXX') tra from dual;

9XXX9999 

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

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

SQL> 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

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。

SQL> select  LENGTH (' 130 ') 返回字串長度 FROM DUAL;

返回字串長度

5

LENGTHB

語法: LENGTHB(string)

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

NLS_SORT

語法: NLS_SORT(string[,nlsparams])

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

數學函式

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次冪.

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,效果是隻保留年月日.

SQL> 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.常和decode 結合使用

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

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

1     -1     0

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| 位

SQL> 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;


SQL> select  
  TRUNC (SYSDATE, 'DD'), --當天

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

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

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

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

FROM  DUAL;

日期時間函式

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新增函式,返回當前會話時區所對應的日期時間.

SQL> select CURRENT_DATE from dual;

CURRENT_TIMESTAMP

語法: CURRENT_TIMESTAMP

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

SQL> select CURRENT_TIMESTAMP from dual;

DBTIMESONE

語法: DBTIMESONE

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

SQL> select DBTIMESONE from dual;

EXTRACT

語法: EXTRACT(s)

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

SQL> select extract(year from sysdate) year from dual;

Yaer

2013

FROM_TZ

語法: FROM_TZ(s)

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

SQL> 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(sysdate)

31-5月 -04

LOCALTIMESTAMP

語法: LOCALTIMESTAMP

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

SQL> 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>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。

SQL> select NUMTODSINTERNAL(1000,’minute’) from dual; 

NUMTOYMINTERNAL

語法: NUMTOYMINTERNAL(n,char_expr)

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

SQL> select NUMTOYMINTERNAL(100,’MONTH’) from dual;

ROUND

語法: ROUND(d[,format])

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

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

SQL> select round(sysdate,’MONTH’) from dual;

SYS_EXTRACT_UTC

語法: SYS_EXTRACT_UTC(date)

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

SQL> 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新增函式,返回當前系統的日期時間及時區.

SQL> select systimestamp from dual;

TO_DSINTERNAL

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

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

SQL> select TO_DSINTERNAL(’58:10:10’) from dual;

TO_TIMESTAMP

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

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

SQL> select systimestamp from dual

 
-- 字元型轉成timestamp

SQL> select TO_TIMESTAMP(’01-1月-03’) from dual;

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

from dual;


-- timestamp轉成date型

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

from dual;

 
-- date型轉成timestamp

SQL> 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型別.

SQL> select TO_TIMESTAMP_TZ(’20130101’,’yyyymmdd’) from dual;

TO_YMINTERNAL

語法: TO_YMINTERNAL(char)

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


SQL> 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相比的時區偏移.

SQL> select TO_OFFSET (’EST’) from dual; 

轉換函式

ASCIISTR

語法: ASCIISTR(s)

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

SQL> select ASCIISTR (’中國’) 中 from dual;

中

\4E2D\56FD

BIN_TO_NUM

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

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

SQL> select BIN_TO_NUM(1,0,1,1,1) 中 from dual;

中

23

CAST

語法: CAST(expr AS type_name)

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

SQL> select cast(SYSDATE AS VARCHAR2) 中 from dual;

Create table tb_dual nologging as SQL> 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字串值.

SQL> 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字串.

SQL> select COMPOSE(‘chateoux’) 中 from dual;

HEXTORAW

語法: HEXTORAW(string)

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

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

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語句.

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語句.

SQL> select SCN_TO_TIMESTAMP(ora_rowscn) from emp;

TIMESTAMP_TO_SCN

語法: TIMESTAMP_TO_SCN(timestamp)

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

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

SQL> select TIMESTAMP_TO_SCN(order_date) from emp;

TO_CHAR

語法: 1:TO_CHAR(character)

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

SQL> select to_char(n’中國’) from dual;


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

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

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

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語句.

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

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


SQL> 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的作用去掉多餘空格

SQL> 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格式轉換為貨幣格式,前面均帶空格

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

SQL> select TO_CHAR(1890.55,'$00G000D00') FROM DUAL;-- $01,890.55

SQL> select TO_CHAR(1890.55,'$99G999D99') FROM DUAL;--  $1,890.55

TO_CLOB

語法: TO_CLOB (char)

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

SQL> select TO_CLOB(n’中國’) from dual;

TO_DATE

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

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

SQL> select to_date(‘20130101’,’yyyymmdd’) from dual;--正確

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

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

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

TO_LOB

語法: TO_LOB (long_column)

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

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


例子to_lob轉化long

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

--通過
create table temp_liutao nologging as SQL> 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語句.

SQL> select TO_SINGLE_BYTE(‘a b c’) from dual;

TRANSLATE…USING

語法: TRANSLATE(str1 USING zfj)

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

SQL> select TRANSLATE(‘中國’ using nchar_cs) from dual;

UNISTR

語法: UNISTR(str1)

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

SQL> select UNISTR (‘\00D6’) from dual;

分組統計函式

分組函式也被稱為多行函式,它會根據輸入的多行資料返回一個結果.

主要用於執行資料統計或彙總操作,並且分組函式只能出現在SQL> select語句選擇列表、order by子句和having子句中.

注意分組函式不能直接在plsql中引用,只能在內嵌SQL> select語句中使用.

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

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

SQL> select count(distinct sal) from emp;

COVAR_POP

語法: COVAR_POP(expr1,expr2)

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

SQL> select COVAR_POP(column1,column2) from emp;

COVAR_SAMP

語法: COVAR_SAMP(expr1,expr2)

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

SQL> select COVAR_SAMP(column1,column2) from emp;

CUME_DIST

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

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

SQL> select CUME_DIST(2000) within group (order by sel) from emp;

DENSE_RANK

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

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

SQL> select DENSE_RANK (5000) within group (order by sel) from emp;

FIRST

語法: FIRST

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

SQL> select min(sal) keep (dense_rank first order by comm desc) from emp;

GROUP_ID

語法: GROUP_ID

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

SQL> select deptno,job,avg(sal),group_id() from emp group by deptno,rollup(deptno,job);

GROUPING

語法: GROUPING(expr)

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

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

	grouping(corp_code),

	grouping(org_level)

from tb_sys_organization

group by rollup(corp_code, org_level);


SQL> 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位向量的值.

SQL> 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新增,不能單獨使用,必須與其他分組函式結合使用.通過使用該函式,可以取得排序等級的最後一級,然後使用分組函式彙總該等級的資料.

SQL> select min(sal) keep (dense_rank last order by comm) from emp;

LISTAGG

語法: listagg

功能: 列轉行

SQL> 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子句.

SQL> 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

集合函式

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;

物件函式

物件函式用於操縱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;

其他函式

除了上述涉及的函式外,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。

SQL> 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。

SQL> select decode(a,’金’,1,’銀’,2,0) from table_name;

DEPTH

語法: DEPTH(n)

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

SQL> select fath(1),depth(2) from a;

DUMP

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

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

number_format   結果

8        八進位制表示

10        十進位制表示

16        十六進位制表示

17        單字元

預設的值是十進位制.

如果指定了start_position和length,那麼返回從start_position開始的長為length的位元組.預設返回全部.

資料型別按照下面規定的內部資料型別的編碼作為一個數字進行返回.

程式碼  資料型別

1    VARCHAR2

2    NUMBER

8    LONG

12   DATE

23   RAW

69   ROWID

96    CHAR

106   MLSLABEL

 

col global_name for a30

col dump_string for a50

set lin 200

SQL> select global_name,dump(global_name,1017,8,5) dump_string from global_name;


GLOBAL_NAME          DUMP_STRING

ORACLE.WORLD          Typ=1 Len=12 CharacterSet=ZHS16GBK: W,O,R,L,D

EMPTY_CLOB/EMPTY_BLOB

語法: EMPTY_CLOB()/EMPTY_BLOB()

功能: 獲得一個空的LOB提示符(locator) .EMOTY_CLOB返回一個字元指示符,而EMPTY_BLOB返回一個二進位制指示符, 用來對大資料型別欄位進行初始化操作的函式.

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

SQL> select EMPTY_CLOB() from dual;

EXISTSNODE

語法: EXISTSNODE(XMLType_instance,Xpatgh_string)

功能: 9i新增,用於確認xml節點路徑是否存在,返回0表示不存在,1表示存在..

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

SQL> select EXISTSNODE(value(p),’/purchar/user’) from p;

EXTRACT

語法: EXTRACT (XMLType_instance,Xpatgh_string)

功能: 9i新增,用於返回xml節點路徑下的相應內容..

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

SQL> select EXTRACT (value(p),’/purchar/user’) from p;

EXTRACTVALUE

語法: EXTRACTVALUE(XMLType_instance,Xpatgh_string)

功能: 9i新增,用於返回xml節點路徑下的值..

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

SQL> select EXTRACTVALUE(value(p),’/purchar/user’) from p;

GREATEST

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

功能: 計算引數中最大的表示式.所有表示式的比較型別以expr1為準,比較字元的編碼大小.

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

SQL> select greatest('AA','AB','AC') from dual;

GR

AC


SQL> select greatest('啊','安','天') from dual;

GR

安

GREATEST_LB

語法: GREATEST_LB(label1[,label2]…)

功能: 返回標籤(label)列表中最大的下界.每個標籤必須擁有資料型別MLSLABEL、RAWMLSLABEL或者是一個表因字串文字.函式只能用於truested oracle庫.

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

LEAST

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

功能: 計算引數中最小的表示式.所有表示式的比較型別以expr1為準,比較字元的編碼大小.

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

SQL> select least('啊','安','天') from dual;
 
LE

啊

LEAST_UB

語法: LEAST_UB(label1[,label2]…)

功能: 與GREATEST_UB函式相似,本函式返回標籤列表的最小上界.

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

NLS_CHARSET_DECL_LEN

語法: NLS_CHARSET_DECL_LEN(byte_count,charset_id)

功能: 該函式用於返回位元組數在特定字符集中佔有的字元個數.

SQL> select NLS_CHARSET_DECL_LEN(200,nls_charset_id(‘zhs16gbkf1xed’)) from dual;

NLS_CHARSET_ID

語法: NLS_CHARSET_ID(text)

功能: 該函式用於返回字符集的ID號.

SQL> select NLS_CHARSET_ID( ‘zhs16gbkf1xed’) from dual;

NLS_CHARSET_NAME

語法: NLS_CHARSET_NAME(number)

功能: 該函式用於返回字符集ID號所對應的字符集名.

SQL> select NLS_CHARSET_NAME(852) from dual;

NULLIF

語法: NULLIF (expr1, expr2) ->相等返回NULL,不等返回expr1

功能: 9i新增,用於比較表示式expr1和expr2,相等返回null,否則返回expr1.

SQL> select nullif(expr1, expr2) from table_name;

NVL

語法: NVL (expr1, expr2)

功能: 用於將NULL轉變為實際值,如果expr1是NULL,那麼返回expr2,否則返回expr1,expr1、expr2兩者必須為同類型或expr2可以隱式轉換為expr1,否則會報錯.

SQL> select nvl(column_name,0) from tbale_name;

特別的date可以隱式轉換為number,所以下面正確

SQL> select NVL(to_date('2017-01-01','yyyy-mm-dd')-sysdate,SYSDATE) FROM dual;

NVL2

語法: NVL2 (expr1, expr2, expr3)

功能: 9i新增,expr1不為NULL,返回expr2;expr1為NULL,返回expr3。expr1可以是任意資料型別;expr2與expr3可以是除LONG外的任意資料型別,但需要型別一致或expr3可以隱式轉換為expr2。

特別的date可以隱式轉換為number,所以下面正確

SQL> select NVL2(to_date('01-jun-2016'),sysdate - to_date('01-jun-2016'),sysdate) FROM dual;

OVER

語法: sun/count ( * ) over ( partition by XXX order by XXX )

功能: 此函式為分析函式,有別於本文介紹中的其他函式,更詳細看本部落格“分析函式”專題

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

sum(sal) over (partition by deptno order by ename)
sql

COUNT( * )

OVER (

PARTITION BY class_id

ORDER BY ROWNUM

ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)


COUNT( * )

OVER (PARTITION BY e.phone

ORDER BY pp.sort, qs.user_id DESC, ROWNUM

ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)

PATH

語法: PATH(correction_integer)

功能: 9i新增,用於返回特定XML資源所對應的相對路徑.

SQL> select path(1),depth(2) from table_name;

SYS_CONNECT_BY_PATH

語法: SYS_CONNECT_BY_PATH(column,char)

功能: 9i新增(只適用於層次查詢),用於返回從根到節點的列值路徑.

SQL> select lpad(‘ ‘,2*level-1)||sys_connect_by_path(ename,’/’) from table_name start with ename=’scott’ connect by prior empno=mgr;

SYS_CONTEXT

語法: sys_coniext(‘context’,’attribute’)

功能: 該函式用於返回應用上下文的特定屬性值,獲得系統資訊,其中context為上下文名,而attribute為應用上下文名,此函式可以得到oracle主機及客戶端的資訊.

SQL> select  
	SYS_CONTEXT ('USERENV', 'TERMINAL') 客戶端名稱,

    SYS_CONTEXT ('USERENV', 'LANGUAGE') 客戶端語言,

    SYS_CONTEXT ('USERENV', 'SESSIONID') sessionid,

    SYS_CONTEXT ('USERENV', 'INSTANCE') instance,

    SYS_CONTEXT ('USERENV', 'ENTRYID') entryid,

    SYS_CONTEXT ('USERENV', 'ISDBA') isdba,

    SYS_CONTEXT ('USERENV', 'NLS_TERRITORY') 地區,

    SYS_CONTEXT ('USERENV', 'NLS_CURRENCY') 貨幣,

    SYS_CONTEXT ('USERENV', 'NLS_CALENDAR') nls_calendar,

    SYS_CONTEXT ('USERENV', 'NLS_DATE_FORMAT') 時間格式,

    SYS_CONTEXT ('USERENV', 'NLS_DATE_LANGUAGE') 時間語言,

    SYS_CONTEXT ('USERENV', 'NLS_SORT') nls_sort,

    SYS_CONTEXT ('USERENV', 'CURRENT_USER') current_user,

    SYS_CONTEXT ('USERENV', 'CURRENT_USERID') current_userid,

    SYS_CONTEXT ('USERENV', 'SESSION_USER') session_user,

    SYS_CONTEXT ('USERENV', 'SESSION_USERID') session_userid,

    SYS_CONTEXT ('USERENV', 'PROXY_USER') proxy_user,

    SYS_CONTEXT ('USERENV', 'PROXY_USERID') proxy_userid,

    SYS_CONTEXT ('USERENV', 'DB_DOMAIN') db_domain,

	SYS_CONTEXT ('USERENV', 'DB_NAME') 資料庫名稱,

	SYS_CONTEXT ('USERENV', 'HOST') 客戶端完成名稱,

	SYS_CONTEXT ('USERENV', 'OS_USER') 客戶端使用者,

	SYS_CONTEXT ('USERENV', 'EXTERNAL_NAME') external_name,

	SYS_CONTEXT ('USERENV', 'IP_ADDRESS') 客戶端IP地址,

	SYS_CONTEXT ('USERENV', 'NETWORK_PROTOCOL') 網路協議,

	SYS_CONTEXT ('USERENV', 'BG_JOB_ID') bg_job_id,

	SYS_CONTEXT ('USERENV', 'FG_JOB_ID') fg_job_id,

	SYS_CONTEXT ('USERENV', 'AUTHENTICATION_TYPE') authentication_type,

	SYS_CONTEXT ('USERENV', 'AUTHENTICATION_DATA') authentication_data

FROM  DUAL

SYS_DBURIGEN

語法: SYS_DBURIGEN(column)

功能: 9i新增,根據列或屬性生產型別為DBUriType的URL。

SQL> select SYS_DBURIGEN(ename) from emp;

SYS_GUID

語法: SYS_GUID()

功能: 該函式用於生產型別為RAW的16位元組的唯一識別符號,每次呼叫該函式都會發生不同的RAW資料.

SQL> select SYS_GUID() from emp;

SYS_TYPEID

語法: SYS_TYPEID(object_type_value)

功能: 該函式用於返回唯一的型別ID值.

SQL> select name, SYS_TYPEID(value(p)) from emp p;

SYS_XMLAGG

語法: SYS_XMLAGG(expr[,fmt])

功能: 9i新增,使用者彙總所有XML文件,並生成一個XML文件.

SQL> select SYS_XMLAGG(sys_xmlgen(ename)) from emp p;

SYS_XMLGEN

語法: SYS_XMLGEN(expr[,fmt])

功能: 9i新增,根據資料庫表的行和列生成一個XMLType例項.

SQL> select sys_xmlgen(ename) from emp p;

UID

語法: UID

功能: 獲得當前資料庫用的惟一標識,標識是一個整數.

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

show user

USER 為"GAO"

SQL> select username,user_id from dba_users where user_id=uid;

USERNAME             USER_ID

GAO                  25

UPDATEXML

語法: UPDATEXML(XMLType_instance,Xpath_string,value_expr)

功能: 9i新增,用於更新特定XMLType例項相對應節點路徑的內容.

Update xmltable p set p=updatexml(value(p),’/pruch/user/text()’,’scott’)

USER

語法: USER

功能: 取得當前oracle使用者的名字,返回的結果是一個VARCHAR2型字串.

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

SQL> select user from dual;

USER

GAO

USERENV

語法: USERENV(option)

功能: 根據引數option,取得一個有關當前會話資訊的VARCHAR2數值.

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

返回當前使用者環境的資訊,opt可以是:

ENTRYID,SESSIONID,TERMINAL,ISDBA,LABLE,LANGUAGE,CLIENT_INFO,LANG,VSIZE

OPTION='ISDBA'若當前是DBA角色,則為TRUE,否則FALSE.

OPTION='LANGUAGE'返回資料庫的字符集.

OPTION='SESSIONID'為當前會話識別符號.

OPTION='ENTRYID'返回可審計的會話識別符號.

OPTION='LANG'返回會話語言名稱的ISO簡記.

OPTION='INSTANCE'返回當前的例項.

OPTION='terminal'返回當前計算機名


ISDBA 檢視當前使用者是否是DBA如果是則返回true

SQL> select userenv('isdba') from dual;

USEREN

FALSE

 

SESSION返回會話標誌

SQL> select userenv('sessionid') from dual;

USERENV('SESSIONID')

	152

 

ENTRYID返回會話人口標誌

SQL> select userenv('entryid') from dual;

USERENV('ENTRYID')

	0


INSTANCE返回當前INSTANCE的標誌

SQL> select userenv('instance') from dual;

USERENV('INSTANCE')

	1

 

LANGUAGE返回當前環境變數,包括語言、地區、字符集

SQL> select userenv('language') from dual;

USERENV('LANGUAGE')

SIMPLIFIED CHINESE_CHINA.ZHS16GBK

 

LANG返回當前環境的語言的縮寫

SQL> select userenv('lang') from dual;

USERENV('LANG')

ZHS

 

TERMINAL返回使用者的終端或機器的OS標示符

SQL> select userenv('terminal') from dual;

USERENV('TERMINA')

GAO


CLIENT_INFO返回由包DBMS_APPLICATION_INFO所儲存的使用者會話資訊(64位元組)

SQL> select userenv(‘CLIENT_INFO’) from dual;

VSIZE

語法: VSIZE(value)

功能: 獲得value的內部表示的位元組數.如果value是NULL,結果是NULL.

使用位置:  SQL語句.


SQL> select vsize(user),user from dual;

VSIZE(USER) USER

	6 SYSTEM

XMLAGG

語法: XMLAGG(XMLType_instance [order by sort_list])

功能: 9i新增,用於彙總多個XML塊,並生成XML文件.

SQL> select xmlagg(xmlelement(“employee”,ename||’ ’||sal)) from emp where deptno=10;

XMLCOLATTVAL

語法: XMLCOLATTVAL(value_expr1[,value_expr2]…)

功能: 9i新增,用於生成XML塊,並增加”column”作為屬性名.

SQL> select xmlelement(“emp”, XMLCOLATTVAL(ename,sall)) from emp where deptno=10;

XMLCONCAT

語法: XMLCONCAT(XMLType_instance1[,XMLType_instance2]…)

功能: 9i新增,用於連線多個XMLType例項,並生成一個新的XMLType例項.

SQL> select XMLCONCAT(xmlelement(‘ename’,ename), xmlelement(‘sal’,sal)) from emp where deptno=10;

XMELEMENT

語法: XMLELEMENT(identifier[,xml_attribute_clause][,value_expr])

功能: 9i新增,用於返回XMLType例項,其中引數identifier指定元素名,引數xml_attribute_clause指定元素屬性子句,引數value_expr指定元素值.

SQL> select XMLELEMENT(‘date’,sysdate) from dual;

SQL> select XMLELEMENT(“emp”,xmlattributes(empno as “id”,ename)) from emp;

XMLFOREST

語法: XMLPOREST(value_expr1[,value_expr2]…)

功能: 9i新增,用於返回XML塊.

 
SQL> select xmlelement(‘ename’, XMLPOREST[ename,sal]) from emp where deptno=10;

XMLSEQUENCE

語法: XMLSEQUENCE(xmltype_instance)

功能: 9i新增,用於返回xmltype例項中頂級節點一下的varray元素.


SQL> select XMLSEQUENCE(extract(value(x),’/purorder/line/*’)) from emp p where deptno=10;

XMLTRANSFORM

語法: XMLTRANSFORM(xmltype_instance,xsl_ss)

功能: 9i新增,用於將xmltype例項按照XSL樣式進行轉換,並生成新的xmltype例項.


SQL> select XMLTRANSFORM(w.warehouse_spec,x.coll).getclobval from warehouse w,xsl_tab x where w.name=x.name;