1、LOWER(c) 將指定字符串內(nèi)字符變?yōu)樾懀С諧HAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB,NCLOB類型 例如:SELECT LOWER('WhaT is tHis') FROM DUAL;
2、UPPER(c) 將指定字符串內(nèi)字符變?yōu)榇髮懀С諧HAR,VARCHAR2,NCHAR,NVARCHAR2,CLOB,NCLOB類型 例如:SELECT UPPER('WhaT is tHis') FROM DUAL;
3、LPAD(c1,n[,c2]) 返回指定長度=n的字符串,需要注意的有幾點: 如果nc1.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; 最后大家再猜一猜,如果n0,結(jié)果會怎么樣
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) 哈哈,被俺無敵的形容方式搞暈頭了吧,這個地方還是看圖更明了一些。 看起來很復(fù)雜,理解起來很簡單: 如果沒有指定任何參數(shù)則oracle去除c1頭尾空格 例如:SELECT TRIM(' WhaT is tHis ') FROM DUAL; 如果指定了c2參數(shù),則oracle去掉c1頭尾c2(這個建議細致測試,有多種不同情形的喲) 例如:SELECT TRIM('W' FROM 'WhaT is tHis w W') FROM DUAL; 如果指定了leading參數(shù)則會去掉c1頭部c2 例如:SELECT TRIM(leading 'W' FROM 'WhaT is tHis w W') FROM DUAL; 如果指定了trailing參數(shù)則會去掉c1尾部c2 例如:SELECT TRIM(trailing 'W' FROM 'WhaT is tHis w W') FROM DUAL; 如果指定了both參數(shù)則會去掉c1頭尾c2(跟不指定有區(qū)別嗎?沒區(qū)別!) 例如:SELECT TRIM(both 'W' FROM 'WhaT is tHis w W') FROM DUAL;
注意:c2長度=1
6、LTRIM(c1[,c2]) 千萬表以為與上面那個長的像,功能也與上面的類似,本函數(shù)是從字符串c1左側(cè)截取掉與指定字符串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;
10、SUBSTR(c1,n1[,n2]) 截取指定長度的字符串。稍不注意就可能充滿了陷阱的函數(shù)。 n1=開始長度; n2=截取的字符串長度,如果為空,默認截取到字符串結(jié)尾; 如果n1=0 then n1=1 如果n1>0,則oracle從左向右確認起始位置截取 例如:SELECT SUBSTR('What is this',5,3) FROM DUAL; 如果n10,則oracle從右向左數(shù)確認起始位置 例如:SELECT SUBSTR('What is this',-5,3) FROM DUAL; 如果n1>c1.length則返回空 例如:SELECT SUBSTR('What is this',50,3) FROM DUAL; 然后再請你猜猜,如果n21,會如何返回值呢
11、TRANSLATE(c1,c2,c3) 就功能而言,此函數(shù)與replace有些相似。但需要注意的一點是,translate是絕對匹配替換,這點與replace函數(shù)具有非常大區(qū)別。什么是絕對匹配替換呢?簡單的說,是將字符串c1中按一定的格式c2替換為c3。如果文字形容仍然無法理解,我們通過幾具實例來說明: 例如: SELECT TRANSLATE('What is this','','-') FROM DUAL; SELECT TRANSLATE('What is this','-','') FROM DUAL; 結(jié)果都是空。來試試這個: SELECT TRANSLATE('What is this',' ',' ') FROM DUAL; 再來看這個: SELECT TRANSLATE('What is this','ait','-*') FROM DUAL; 是否明白了點呢?Replace函數(shù)理解比較簡單,它是將字符串中指定字符替換成其它字符,它的字符必須是連續(xù)的。而translate中,則是指定字符串c1中出現(xiàn)的c2,將c2中各個字符替換成c3中位置順序與其相同的c3中的字符。明白了?Replace是替換,而translate則像是過濾
(三).字符型函數(shù)返回數(shù)字值(Character Functions Returning Number Values) 本類函數(shù)支持所有的數(shù)據(jù)類型
1、ADD_MONTHS() 返回指定日期月份+n之后的值,n可以為任何整數(shù)。 例如:SELECT ADD_MONTHS(sysdate,12),ADD_MONTHS(sysdate,-12) FROM DUAL;
2、CURRENT_DATE 返回當前session所在時區(qū)的默認時間 例如: SQL> alter session set nls_date_format = 'mm-dd-yyyy' ; SQL> select current_date from dual;
3、SYSDATE 功能與上相同,返回當前session所在時區(qū)的默認時間。但是需要注意的一點是,如果同時使用sysdate與current_date獲得的時間不一定相同,某些情況下current_date會比sysdate快一秒。經(jīng)過與xyf_tck(兄臺的大作ORACLE的工作機制寫的很好,深入淺出)的短暫交流,我們認為current_date是將current_timestamp中毫秒四舍五入后的返回,雖然沒有找到文檔支持,但是想來應(yīng)該八九不離十。同時,僅是某些情況下會有一秒的誤差,一般情況下并不會對你的操作造成影響,所以了解即可。 例如: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默認時區(qū)中的星期形式相同。 例如:三思用的中文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; 則會執(zhí)行出錯,提供你說周中的日無效,就是這個原因了。
1、TO_CHAR() 本函數(shù)又可以分三小類,分別是 轉(zhuǎn)換字符->字符TO_CHAR(c):將nchar,nvarchar2,clob,nclob類型轉(zhuǎn)換為char類型; 例如:SELECT TO_CHAR('AABBCC') FROM DUAL;
轉(zhuǎn)換時間->字符TO_CHAR(d[,fmt]):將指定的時間(data,timestamp,timestamp with time zone)按照指定格式轉(zhuǎn)換為varchar2類型; 例如:SELECT TO_CHAR(sysdate,'yyyy-mm-dd hh24:mi:ss') FROM DUAL;
轉(zhuǎn)換數(shù)值->字符TO_CHAR(n[,fmt]):將指定數(shù)值n按照指定格式fmt轉(zhuǎn)換為varchar2類型并返回; 例如:SELECT TO_CHAR(-100, 'L99G999D99MI') FROM DUAL;
2、TO_DATE(c[,fmt[,nls]]) 將char,nchar,varchar2,nvarchar2轉(zhuǎn)換為日期類型,如果fmt參數(shù)不為空,則按照fmt中指定格式進行轉(zhuǎn)換。注意這里的fmt參數(shù)。如果ftm為'J'則表示按照公元制(Julian day)轉(zhuǎn)換,c則必須為大于0并小于5373484的正整數(shù)。 例如: 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中指定格式轉(zhuǎn)換為數(shù)值類型并返回。 例如:SELECT TO_NUMBER('-100.00', '9G999D99') FROM DUAL;
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;
1、BIN_TO_NUM(n1,n2...n) 將一組位向量轉(zhuǎn)換為等價的十進制形式。 例如:SELECT BIN_TO_NUM(1,1,0) FROM DUAL;
2、CAST(c as newtype) 將指定字串轉(zhuǎn)換為指定類型,基本只對字符類型有效,比如char,number,date,rowid等。此類轉(zhuǎn)換有一個專門的表列明了哪種類型可以轉(zhuǎn)換為哪種類型,此處就不作酹述。 例如:SELECT CAST('1101' AS NUMBER(5)) FROM DUAL;
3、CHARTOROWID(c) 將字符串轉(zhuǎn)換為rowid類型 例如:SELECT CHARTOROWID('A003D1ABBEFAABSAA0') FROM DUAL;
4、ROWIDTOCHAR(rowid) 轉(zhuǎn)換rowid值為varchar2類型。返回串長度為18個字節(jié)。 例如:SELECT ROWIDTOCHAR(rowid) FROM DUAL;
5、TO_MULTI_BYTE(c) 將指定字符轉(zhuǎn)換為全角并返回char類型字串 例如:SELECT TO_MULTI_BYTE('ABC abc 中華') FROM DUAL;
6、TO_SINGLE_BYTE(c) 將指定字符轉(zhuǎn)換為半角并返回char類型字串 例如:SELECT TO_SINGLE_BYTE('ABC abc中華') FROM DUAL;
(六).其它輔助函數(shù)(Miscellaneous Single-Row Functions) 1、COALESCE(n1,n2,....n) 返回序列中的第一個非空值 例如:SELECT COALESCE(null,5,6,null,9) FROM DUAL;
如上所示,dump擁有不少參數(shù)。其本質(zhì)是以指定格式,返回指定長度的exp的內(nèi)部表示形式的varchar2值。fmt含4種格式:8||10||16||17,分別表示8進制,10進制,16進制和單字符,默認為10進制。start參數(shù)表示開始位置,length表示以,分隔的字串數(shù)。 例如:SELECT DUMP('abcdefg',17,2,4) FROM DUAL;