1. 程式人生 > >ORACLE常用數值函式、轉換函式、字串函式介紹

ORACLE常用數值函式、轉換函式、字串函式介紹

  注:N表示數字型,C表示字元型,D表示日期型,[]表示內中引數可被忽略,fmt表示格式。 

  單值函式在查詢中返回單個值,可被應用到select,where子句,start with以及connect by 子句和having子句。 
(一).數值型函式(Number Functions) 
    數值型函式輸入數字型引數並返回數值型的值。多數該類函式的返回值支援38位小數點,諸如:COS, COSH, EXP, LN, LOG, SIN, SINH, SQRT, TAN, and TANH 支援36位小數點。ACOS, ASIN, ATAN, and ATAN2支援30位小數點。 

1、MOD(n1,n2) 返回n1除n2的餘數,如果n2=0則返回n1的值。 
    例如:SELECT MOD(24,5) FROM DUAL; 

2、ROUND(n1[,n2]) 返回四捨五入小數點右邊n2位後n1的值,n2預設值為0,如果n2為負數就舍入到小數點左邊相應的位上(雖然oracle documents上提到n2的值必須為整數,事實上執行時此處的判斷並不嚴謹,即使n2為非整數,它也會自動將n2取整後做處理,但是我文件中其它提到必須為整的地方需要特別注意,如果不為整執行時會報錯的)。 
例如:SELECT ROUND(23.56),ROUND(23.56,1),ROUND(23.56,-1) FROM DUAL; 

3、TRUNC(n1[,n2] 返回截尾到n2位小數的n1的值,n2預設設定為0,當n2為預設設定時會將n1截尾為整數,如果n2為負值,就截尾在小數點左邊相應的位上。 
例如:SELECT TRUNC(23.56),TRUNC(23.56,1),TRUNC(23.56,-1) FROM DUAL;

(二).字元型函式返回字元值(Character Functions Returning Character Values) 
  該類函式返回與輸入型別相同的型別。 
 返回的CHAR型別值長度不超過2000位元組; 
 返回的VCHAR2型別值長度不超過4000位元組; 
如果上述應返回的字元長度超出,oracle並不會報錯而是直接截斷至最大可支援長度返回。 

 返回的CLOB型別值長度不超過4G; 
對於CLOB型別的函式,如果返回值長度超出,oracle不會返回任何錯誤而是直接丟擲錯誤。 

1、LOWER(c) 將指定字串內字元變為小寫,支援CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB,NCLOB型別 
    例如:SELECT LOWER('WhaT is tHis') FROM DUAL; 

2、UPPER(c) 將指定字串內字元變為大寫,支援CHAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB,NCLOB型別 
    例如:SELECT UPPER('WhaT is tHis') FROM DUAL; 

3、LPAD(c1,n[,c2]) 返回指定長度=n的字串,需要注意的有幾點: 
 如果n<c1.length則從右到左擷取指定長度返回; 
 如果n>c1.length and c2 is null,以空格從左向右補充字元長度至n並返回; 
 如果n>c1.length and c2 is not null,以指定字元c2從左向右補充c1長度至n並返回; 
例如:SELECT LPAD('WhaT is tHis',5),LPAD('WhaT is tHis',25),LPAD('WhaT is tHis',25,'-') FROM DUAL; 
最後大家再猜一猜,如果n<0,結果會怎麼樣 

4、RPAD(c1,n[,c2]) 返回指定長度=n的字串,基本與上同,不過補充字元是從右向左方向正好與上相反; 
    例如:SELECT RPAD('WhaT is tHis',5),RPAD('WhaT is tHis',25),RPAD('WhaT is tHis',25,'-') FROM DUAL; 

5、TRIM([[LEADING||TRAILING||BOTH] c2 FROM] c1) 哈哈,被俺無敵的形容方式搞暈頭了吧,這個地方還是看圖更明瞭一些。 
看起來很複雜,理解起來很簡單: 
 如果沒有指定任何引數則oracle去除c1頭尾空格 
例如:SELECT TRIM(' WhaT is tHis ') FROM DUAL; 
 如果指定了c2引數,則oracle去掉c1頭尾c2(這個建議細緻測試,有多種不同情形的喲) 
例如:SELECT TRIM('W' FROM 'WhaT is tHis w W') FROM DUAL; 
 如果指定了leading引數則會去掉c1頭部c2 
例如:SELECT TRIM(leading 'W' FROM 'WhaT is tHis w W') FROM DUAL; 
 如果指定了trailing引數則會去掉c1尾部c2 
例如:SELECT TRIM(trailing 'W' FROM 'WhaT is tHis w W') FROM DUAL; 
 如果指定了both引數則會去掉c1頭尾c2(跟不指定有區別嗎?沒區別!) 
例如:SELECT TRIM(both 'W' FROM 'WhaT is tHis w W') FROM DUAL; 

注意:c2長度=1 

6、LTRIM(c1[,c2]) 千萬表以為與上面那個長的像,功能也與上面的類似,本函式是從字串c1左側擷取掉與指定字串c2相同的字元並返回。如果c2為空則預設擷取空格。 
例如:SELECT LTRIM('WWhhhhhaT is tHis w W','Wh') FROM DUAL; 

7、RTRIM(c1,c2)與上同,不過方向相反 
    例如:SELECT RTRIM('WWhhhhhaT is tHis w W','W w') FROM DUAL; 

8、REPLACE(c1,c2[,c3]) 將c1字串中的c2替換為c3,如果c3為空,則從c1中刪除所有c2。 
    例如:SELECT REPLACE('WWhhhhhaT is tHis w W','W','-') FROM DUAL; 

9、SOUNDEX(c) 神奇的函式啊,該函式返回字串引數的語音表示形式,對於比較一些讀音相同,但是拼寫不同的單詞非常有用。計算語音的演算法如下: 
 保留字串首字母,但刪除a、e、h、i、o、w、y。 
 將下表中的數字賦給相對應的字母: 
1:b、f、p、v 
2:c、g、k、q、s、x、z 
3:d、t 
4:l 
5:m、n 
6:R 
 如果字串中存在擁有相同數字的2個以上(包含2個)的字母在一起(例如b和f),或者只有h或w,則刪除其他的,只保留1個; 
 只返回前4個位元組,不夠用0填充 
例如:SELECT SOUNDEX('dog'),soundex('boy') FROM DUAL; 

10、SUBSTR(c1,n1[,n2]) 擷取指定長度的字串。稍不注意就可能充滿了陷阱的函式。 
n1=開始長度; 
n2=擷取的字串長度,如果為空,預設擷取到字串結尾; 
 如果n1=0 then n1=1 
 如果n1>0,則oracle從左向右確認起始位置擷取 
例如:SELECT SUBSTR('What is this',5,3) FROM DUAL; 
 如果n1<0,則oracle從右向左數確認起始位置 
例如:SELECT SUBSTR('What is this',-5,3) FROM DUAL; 
 如果n1>c1.length則返回空 
例如:SELECT SUBSTR('What is this',50,3) FROM DUAL; 
然後再請你猜猜,如果n2<1,會如何返回值呢 

11、TRANSLATE(c1,c2,c3) 就功能而言,此函式與replace有些相似。但需要注意的一點是,translate是絕對匹配替換,這點與replace函式具有非常大區別。什麼是絕對匹配替換呢?簡單的說,是將字串c1中按一定的格式c2替換為c3。如果文字形容仍然無法理解,我們通過幾具例項來說明: 
例如: 
SELECT TRANSLATE('What is this','','-') FROM DUAL; 
SELECT TRANSLATE('What is this','-','') FROM DUAL; 
結果都是空。來試試這個: 
SELECT TRANSLATE('What is this',' ',' ') FROM DUAL; 
再來看這個: 
SELECT TRANSLATE('What is this','ait','-*') FROM DUAL; 
是否明白了點呢?Replace函式理解比較簡單,它是將字串中指定字元替換成其它字元,它的字元必須是連續的。而translate中,則是指定字串c1中出現的c2,將c2中各個字元替換成c3中位置順序與其相同的c3中的字元。明白了?Replace是替換,而translate則像是過濾

(三).字元型函式返回數字值(Character Functions Returning Number Values) 
本類函式支援所有的資料型別 

1、INSTR(c1,c2[,n1[,n2]]) 返回c2在c1中位置 
 c1:原字串 
 c2:要尋找的字串 
 n1:查詢起始位置,正值表示從左到右,負值表示從右到左 (大小表示位置,比如3表示左面第3處開始,-3表示右面第3處開始)。黑黑,如果為0的話,則返回的也是0 
 n2:第幾個匹配項。大於0 
例如:SELECT INSTR('abcdefg','e',-3) FROM DUAL; 

2、LENGTH(c) 返回指定字串的長度。如果 
例如:SELECT LENGTH('A123中') FROM DUAL; 
猜猜SELECT LENGTH('') FROM DUAL;的返回值是什麼 

(四).日期函式(Datetime Functions) 
本類函式中,除months_between返回數值外,其它都將返回日期。 

1、ADD_MONTHS() 返回指定日期月份+n之後的值,n可以為任何整數。 
例如:SELECT ADD_MONTHS(sysdate,12),ADD_MONTHS(sysdate,-12) FROM DUAL; 

2、CURRENT_DATE 返回當前session所在時區的預設時間 
例如: 
SQL> alter session set nls_date_format = 'mm-dd-yyyy' ; 
SQL> select current_date from dual; 

3、SYSDATE 功能與上相同,返回當前session所在時區的預設時間。但是需要注意的一點是,如果同時使用sysdate與current_date獲得的時間不一定相同,某些情況下current_date會比sysdate快一秒。經過與xyf_tck(兄臺的大作ORACLE的工作機制寫的很好,深入淺出)的短暫交流,我們認為current_date是將current_timestamp中毫秒四捨五入後的返回,雖然沒有找到文件支援,但是想來應該八九不離十。同時,僅是某些情況下會有一秒的誤差,一般情況下並不會對你的操作造成影響,所以瞭解即可。 
例如:SELECT SYSDATE,CURRENT_DATE FROM DUAL; 

4、LAST_DAY(d) 返回指定時間所在月的最後一天 
例如:SELECT last_day(SYSDATE) FROM DUAL; 

5、NEXT_DAY(d,n) 返回指定日期後第一個n的日期,n為一週中的某一天。但是,需要注意的是n如果為字元的話,它的星期形式需要與當前session預設時區中的星期形式相同。 
例如:三思用的中文nt,nls_language值為SIMPLIFIED CHINESE 
SELECT NEXT_DAY(SYSDATE,5) FROM DUAL; 
SELECT NEXT_DAY(SYSDATE,'星期四') FROM DUAL; 
兩種方式都可以取到正確的返回,但是: 
SELECT NEXT_DAY(SYSDATE,'Thursday') FROM DUAL; 
則會執行出錯,提供你說週中的日無效,就是這個原因了。 

6、MONTHS_BETWEEN(d1,d2) 返回d1與d2間的月份差,視d1,d2的值大小,結果可正可負,當然也有可能為0 
例如: 
SELECT months_between(SYSDATE, sysdate), 
months_between(SYSDATE, add_months(sysdate, -1)), 
months_between(SYSDATE, add_months(sysdate, 1)) 
FROM DUAL; 

7、ROUND(d[,fmt]) 前面講數值型函式的時候介紹過ROUND,此處與上功能基本相似,不過此處操作的是日期。如果不指定fmt引數,則預設返回距離指定日期最近的日期。 
例如:SELECT ROUND(SYSDATE,'HH24') FROM DUAL; 

8、TRUNC(d[,fmt]) 與前面介紹的數值型TRUNC原理相同,不過此處也是操作的日期型。 
例如:SELECT TRUNC(SYSDATE,'HH24') FROM DUAL; 

(五).轉換函式(Conversion Functions) 
轉換函式將指定字元從一種型別轉換為另一種,通常這類函式遵循如下慣例:函式名稱後面跟著待轉換型別以及輸出型別。 

1、TO_CHAR() 本函式又可以分三小類,分別是 
 轉換字元->字元TO_CHAR(c):將nchar,nvarchar2,clob,nclob型別轉換為char型別; 
例如:SELECT TO_CHAR('AABBCC') FROM DUAL; 

 轉換時間->字元TO_CHAR(d[,fmt]):將指定的時間(data,timestamp,timestamp with time zone)按照指定格式轉換為varchar2型別; 
例如:SELECT TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss') FROM DUAL; 

 轉換數值->字元TO_CHAR(n[,fmt]):將指定數值n按照指定格式fmt轉換為varchar2型別並返回; 
例如:SELECT TO_CHAR(-100, 'L99G999D99MI') FROM DUAL; 

2、TO_DATE(c[,fmt[,nls]]) 將char,nchar,varchar2,nvarchar2轉換為日期型別,如果fmt引數不為空,則按照fmt中指定格式進行轉換。注意這裡的fmt引數。如果ftm為'J'則表示按照公元制(Julian day)轉換,c則必須為大於0並小於5373484的正整數。 
例如: 
SELECT TO_DATE(2454336, 'J') FROM DUAL; 
SELECT TO_DATE('2007-8-23 23:25:00', 'yyyy-mm-dd hh24:mi:ss') FROM DUAL; 

為什麼公元制的話,c的值必須不大於5373484呢?因為Oracle的DATE型別的取值範圍是公元前4712年1月1日至公元9999年12月31日。看看下面這個語句: 
SELECT TO_CHAR(TO_DATE('9999-12-31','yyyy-mm-dd'),'j') FROM DUAL; 

3、TO_NUMBER(c[,fmt[,nls]]) 將char,nchar,varchar2,nvarchar2型字串按照fmt中指定格式轉換為數值型別並返回。 
例如:SELECT TO_NUMBER('-100.00', '9G999D99') FROM DUAL; 

(六).其它輔助函式(Miscellaneous Single-Row Functions) 

1、DECODE(exp,s1,r1,s2,r2..s,r[,def]) 可以把它理解成一個增強型的if else,只不過它並不通過多行語句,而是在一個函式內實現if else的功能。 
exp做為初始引數。s做為對比值,相同則返回r,如果s有多個,則持續遍歷所有s,直到某個條件為真為止,否則返回預設值def(如果指定了的話),如果沒有預設值,並且前面的對比也都沒有為真,則返回空。 
毫無疑問,decode是個非常重要的函式,在實現行轉列等功能時都會用到,需要牢記和熟練使用。 

例如:select decode('a2','a1','true1','a2','true2','default') from dual; 

2、GREATEST(n1,n2,...n) 返回序列中的最大值 
例如:SELECT GREATEST(15,5,75,8) "Greatest" FROM DUAL; 

3、LEAST(n1,n2....n) 返回序列中的最小值 
例如:SELECT LEAST(15,5,75,8) LEAST FROM DUAL; 

4、NULLIF(c1,c2) 
Nullif也是個很有意思的函式。邏輯等價於:CASE WHEN c1 = c2 THEN NULL ELSE c1 END 
例如:SELECT NULLIF('a','b'),NULLIF('a','a') FROM DUAL; 

5、NVL(c1,c2) 邏輯等價於IF c1 is null THEN c2 ELSE c1 END。c1,c2可以是任何型別。如果兩者型別不同,則oracle會自動將c2轉換為c1的型別。 
例如:SELECT NVL(null, '12') FROM DUAL; 

6、NVL2(c1,c2,c3) 大家可能都用到nvl,但你用過nvl2嗎?如果c1非空則返回c2,如果c1為空則返回c3 
例如:select nvl2('a', 'b', 'c') isNull,nvl2(null, 'b', 'c') isNotNull from dual; 

7、SYS_CONNECT_BY_PATH(col,c) 該函式只能應用於樹狀查詢。返回通過c1連線的從根到節點的路徑。該函式必須與connect by 子句共同使用。 
例如: 
create table tmp3( 
rootcol varchar2(10), 
nodecol varchar2(10) 
); 

insert into tmp3 values ('','a001'); 
insert into tmp3 values ('','b001'); 
insert into tmp3 values ('a001','a002'); 
insert into tmp3 values ('a002','a004'); 
insert into tmp3 values ('a001','a003'); 
insert into tmp3 values ('a003','a005'); 
insert into tmp3 values ('a005','a008'); 
insert into tmp3 values ('b001','b003'); 
insert into tmp3 values ('b003','b005'); 

select lpad(' ', level*10,'=') ||'>'|| sys_connect_by_path(nodecol,'/') 
from tmp3 
start with rootcol = 'a001' 
connect by prior nodecol =rootcol; 

8、SYS_CONTEXT(c1,c2[,n]) 將指定名稱空間c1的指定引數c2的值按照指定長度n擷取後返回。
Oracle9i提供內建了一個名稱空間USERENV,描述了當前session的各項資訊,其擁有下列引數: 
 CURRENT_SCHEMA:當前模式名; 
 CURRENT_USER:當前使用者; 
 IP_ADDRESS:當前客戶端IP地址; 
 OS_USER:當前客戶端

作業系統使用者; 
等等數十項,更詳細的引數列還請大家直接參考Oracle Online Documents 

例如:SELECT SYS_CONTEXT('USERENV', 'SESSION_USER') FROM DUAL; 
注:N表示數字型,C表示字元型,D表示日期型,[]表示內中引數可被忽略,fmt表示格式。 

單值函式在查詢中返回單個值,可被應用到select,where子句,start with以及connect by 子句和having子句。 
(一).數值型函式(Number Functions) 
數值型函式輸入數字型引數並返回數值型的值。多數該類函式的返回值支援38位小數點,諸如:COS, COSH, EXP, LN, LOG, SIN, SINH, SQRT, TAN, and TANH 支援36位小數點。ACOS, ASIN, ATAN, and ATAN2支援30位小數點。 

1、ABS(n) 返回數字的絕對值 
例如:SELECT ABS(-1000000.01) FROM DUAL; 

2、COS(n) 返回n的餘弦值 
例如:SELECT COS(-2) FROM DUAL; 

3、ACOS(n) 反餘弦函式,n between -1 and 1,返回值between 0 and pi。 
例如:SELECT ACOS(0.9) FROM DUAL; 

4、BITAND(n1,n2) 位與運算,這個太有意思了,雖然沒想到可能用到哪裡,詳細說明一下: 
假設3,9做位與運算,3的二進位制形式為:0011,9的二進位制形式為:1001,則結果是0001,轉換成10進位制數為1。 
例如:SELECT BITAND(3,9) FROM DUAL; 

5、CEIL(n) 返回大於或等於n的最小的整數值 
例如:SELECT ceil(18.2) FROM DUAL; 
考你一下,猜猜ceil(-18.2)的值會是什麼呢 

6、FLOOR(n) 返回小於等於n的最大整數值 
例如:SELECT FLOOR(2.2) FROM DUAL; 
再猜猜floor(-2.2)的值會是什麼呢 

7、BIN_TO_NUM(n1,n2,....n) 二進位制轉向十進位制 
例如:SELECT BIN_TO_NUM(1),BIN_TO_NUM(1,0),BIN_TO_NUM(1,1) FROM DUAL; 

8、SIN(n) 返回n的正玄值,n為弧度。 
例如:SELECT SIN(10) FROM DUAL; 

9、SINH(n) 返回n的雙曲正玄值,n為弧度。 
例如:SELECT SINH(10) FROM DUAL; 

10、ASIN(n) 反正玄函式,n between -1 and 1,返回值between pi/2 and -pi/2。 
例如:SELECT ASIN(0.8) FROM DUAL; 

11、TAN(n) 返回n的正切值,n為弧度 
例如:SELECT TAN(0.8) FROM DUAL; 

12、TANH(n) 返回n的雙曲正切值,n為弧度 
例如:SELECT TANH(0.8) FROM DUAL; 

13、ATAN(n) 反正切函式,n表示弧度,返回值between pi/2 and -pi/2。 
例如:SELECT ATAN(-444444.9999999) FROM DUAL; 

14、EXP(n) 返回e的n次冪,e = 2.71828183 ... 
例如:SELECT EXP(3) FROM DUAL; 

15、LN(n) 返回n的自然對數,n>0 
例如:SELECT LN(0.9) FROM DUAL; 

16、LOG(n1,n2) 返回以n1為底n2的對數,n1 >0 and not 1 ,n2>0 
例如:SELECT LOG(1.1,2.2) FROM DUAL; 

17、POWER(n1,n2) 返回n1的n2次方。n1,n2可以為任意數值,不過如果m是負數,則n必須為整數 
例如:SELECT POWER(2.2,2.2) FROM DUAL; 

18、SIGN(n) 如果n<0返回-1,如果n>0返回1,如果n=0返回0. 
例如:SELECT SIGN(14),SIGN(-14),SIGN(0) FROM DUAL; 

19、SQRT(n) 返回n的平方根,n為弧度。n>=0 
例如:SELECT SQRT(0.1) FROM DUAL; 

(二).字元型函式返回字元值(Character Functions Returning Character Values) 
  該類函式返回與輸入型別相同的型別。 
 返回的CHAR型別值長度不超過2000位元組; 
 返回的VCHAR2型別值長度不超過4000位元組; 
如果上述應返回的字元長度超出,oracle並不會報錯而是直接截斷至最大可支援長度返回。 

 返回的CLOB型別值長度不超過4G; 
對於CLOB型別的函式,如果返回值長度超出,oracle不會返回任何錯誤而是直接丟擲錯誤。 

1、CHR(N[ USING NCHAR_CS]) 返回指定數值在當前字符集中對應的字元 
例如:SELECT CHR(95) FROM DUAL; 

2、CONCAT(c1,c2) 連線字串,等同於|| 
例如:SELECT concat('aa','bb') FROM DUAL; 

3、INITCAP(c) 將字串中單詞的第一個字母轉換為大寫,其它則轉換為小寫 
例如:SELECT INITCAP('whaT is this') FROM DUAL; 

4、NLS_INITCAP(c) 返回指定字串,並將字串中第一個字母變大寫,其它字母變小寫 
例如:SELECT NLS_INITCAP('中華miNZHu') FROM DUAL; 
它還具有一個引數:Nlsparam用來指定排序規則,可以忽略,預設狀態該引數為當前session的排序規則。 

(三).字元型函式返回數字值(Character Functions Returning Number Values) 
本類函式支援所有的資料型別 
1、ASCII(c) 與chr函式的用途剛剛相反,本函式返回指定字元在當前字符集下對應的數值。 
例如:SELECT ASCII('_') FROM DUAL; 

(四).日期函式(Datetime Functions) 
本類函式中,除months_between返回數值外,其它都將返回日期。 
1、CURRENT_TIMESTAMP([n]) 返回當前session所在時區的日期和時間。n表示毫秒級的精度,不大於6 
例如:SELECT CURRENT_TIMESTAMP(3) FROM DUAL; 

2、LOCALTIMESTAMP([n]) 與上同,返回當前session所在時區的日期和時間。n表示毫秒級的精度,不大於6 
例如:SELECT LOCALTIMESTAMP(3) FROM DUAL; 

3、SYSTIMESTAMP([n]) 與上同,返回當前資料庫所在時區的日期和時間,n表示毫秒級的精度,>0 and <6 
例如:SELECT SYSTIMESTAMP(4) FROM DUAL; 

4、DBTIMEZONE 返回資料庫的當前時區 
例如:SELECT DBTIMEZONE FROM DUAL; 

5、SESSIONTIMEZONE 返回當前session所在時區 
例如:SELECT SESSIONTIMEZONE FROM DUAL; 

6、EXTRACT(key from date) key=(year,month,day,hour,minute,second) 從指定時間提到指定日期列 
例如:SELECT EXTRACT(year from sysdate) FROM DUAL; 

7、TO_TIMESTAMP(c1[,fmt]) 將指定字元按指定格式轉換為timestamp格式。 
例如:SELECT TO_TIMESTAMP('2007-8-22', 'YYYY-MM-DD HH:MI:SS') FROM DUAL; 

(五).轉換函式(Conversion Functions) 
轉換函式將指定字元從一種型別轉換為另一種,通常這類函式遵循如下慣例:函式名稱後面跟著待轉換型別以及輸出型別。 

1、BIN_TO_NUM(n1,n2...n) 將一組位向量轉換為等價的十進位制形式。 
例如:SELECT BIN_TO_NUM(1,1,0) FROM DUAL; 

2、CAST(c as newtype) 將指定字串轉換為指定型別,基本只對字元型別有效,比如char,number,date,rowid等。此類轉換有一個專門的表列明瞭哪種型別可以轉換為哪種型別,此處就不作酹述。 
例如:SELECT CAST('1101' AS NUMBER(5)) FROM DUAL; 

3、CHARTOROWID(c) 將字串轉換為rowid型別 
例如:SELECT CHARTOROWID('A003D1ABBEFAABSAA0') FROM DUAL; 

4、ROWIDTOCHAR(rowid) 轉換rowid值為varchar2型別。返回串長度為18個位元組。 
例如:SELECT ROWIDTOCHAR(rowid) FROM DUAL; 

5、TO_MULTI_BYTE(c) 將指定字元轉換為全形並返回char型別字串 
例如:SELECT TO_MULTI_BYTE('ABC abc 中華') FROM DUAL; 

6、TO_SINGLE_BYTE(c) 將指定字元轉換為半形並返回char型別字串 
例如:SELECT TO_SINGLE_BYTE('ABC abc中華') FROM DUAL; 

(六).其它輔助函式(Miscellaneous Single-Row Functions) 
1、COALESCE(n1,n2,....n) 返回序列中的第一個非空值 
例如:SELECT COALESCE(null,5,6,null,9) FROM DUAL; 

2、DUMP(exp[,fmt[,start[,length]]]) 
    dump是個功能非常強悍的函式,對於深入瞭解oracle儲存的人而言相當有用。所以對於我們這些僅僅只是應用的人而言就不知道能將其應用於何處了。此處僅介紹用法,不對其功能做深入分析。

    如上所示,dump擁有不少引數。其本質是以指定格式,返回指定長度的exp的內部表示形式的varchar2值。fmt含4種格式:8||10||16||17,分別表示8進位制,10進位制,16進位制和單字元,預設為10進位制。start引數表示開始位置,length表示以,分隔的字串數。 
例如:SELECT DUMP('abcdefg',17,2,4) FROM DUAL; 

3、EMPTY_BLOB,EMPTY_CLOB 這兩個函式都是返回空lob型別,通常被用於insert和update等語句以初始化lob列,或者將其置為空。EMPTY表示LOB已經被初始化,只不過還沒有用來儲存資料。 

4、NLS_CHARSET_NAME(n) 返回指定數值對應的字符集名稱。 
例如:SELECT NLS_CHARSET_NAME(1) FROM DUAL; 

5、NLS_CHARSET_ID(c) 返回指定字元對應的字符集id。 
例如:SELECT NLS_CHARSET_ID('US7ASCII') FROM DUAL; 

6、NLS_CHARSET_DECL_LEN(n1,n2) 返回一個NCHAR值的宣告寬度(以字元為單位).n1是該值以位元組為單位的長度,n2是該值的字符集ID 
例如:SELECT NLS_CHARSET_DECL_LEN(100, nls_charset_id('US7ASCII')) FROM DUAL; 

7、SYS_EXTRACT_UTC(timestamp) 返回標準通用時間即格林威治時間。 
例如:SELECT SYS_EXTRACT_UTC(current_timestamp) FROM DUAL; 

8、SYS_TYPEID(object_type) 返回物件型別對應的id。 
例如:這個這個,沒有建立過自定義物件,咋做示例? 

9、UID 返回一個唯一標識當前資料庫使用者的整數。 
例如:SELECT UID FROM DUAL; 

10、USER 返回當前session使用者 
例如:SELECT USER FROM DUAL; 

11、USERENV(c) 該函式用來返回當前session的資訊,據oracle文件的說明,userenv是為了保持向下相容的遺留函式。oracle公司推薦你使用sys_context函式呼叫USERENV名稱空間來獲取相關資訊,所以大家瞭解下就行了。 
例如:SELECT USERENV('LANGUAGE') FROM DUAL; 

12、VSIZE(c) 返回c的位元組數。 
例如:SELECT VSIZE('abc中華') FROM DUAL;