1. 程式人生 > >oracle中length()、lengthb()、replace()、regexp_substr()函式使用

oracle中length()、lengthb()、replace()、regexp_substr()函式使用

oracle中length()、lengthb()、replace()、regexp_substr()函式使用
 1. length()、lengthb(): 
   lengthb(string)獲取string所佔的位元組長度:返回字串的長度,單位是位元組
   length(string)獲取string所佔的字元長度:返回字串的長度,單位是字元
   對於單位元組字元,length()和lengthb()是一樣的.
   如可以用length(‘string’)=lengthb(‘string’)

判斷字串是否含有中文。
   注:一個漢字在Oracle資料庫裡佔多少位元組跟資料庫的字符集有關,UTF8時,長度為三。
   例:

select lengthb('我') from dual /*輸出:3(表示我的資料庫中一個漢字佔3個位元組)*/
select lengthb('我,a,b,c') from dual /*輸出:9*/
select length('我,a,b,c') from dual  /*輸出:7*/

   --------------------- 
[原作者:阿杜_ardo]  
 2. replace():
 replace()

函式是用另外一個值來替代串中的某個值。
格式如下所示:
REPLACE ( char, search_string [, replace_string]) 
如果沒有指定replace_string 變數的值,那麼當發現search_string 變數的值時,就將其刪除。
例:

select replace('我,a,b,c',',','&') from dual /*指定替換值時輸出:我&a&b&c*/
select replace('我,a,b,c',',') from dual /*不指定替換值時輸出:我abc。(不指定時就將被替換值刪除)*/

[原作者:java_lover]

  

例項:獲取字串"aa,bb,cc,dd,ee,"的“長度”也就是有幾個“值”

select length('aa,bb,cc,dd,ee,') val1 from dual /*先獲取總長度*/
select length(replace('aa,bb,cc,dd,ee,',',')) val2 from dual /*然後用replace()獲得去掉逗號的結果並獲取其長度*/
select length('aa,bb,cc,dd,ee,')-length(replace('aa,bb,cc,dd,ee,',',')) val from dual /*兩個長度相減即可獲取我們要的結果*/

3.regexp_substr():

功能:在目標字串中獲取符合正則表示式的字串。
語法:

REGEXP_SUBSTR(source_char, pattern [, position [, occurrence [, match_parameter ]]])

source_char:目標字串

pattern:正則表示式

position:(可選)搜尋開始位置,預設為1

occurrence:(可選)第n個匹配位置,預設為1

match_parameter:(可選)是取值範圍

  1. i:大小寫不敏感;
  2. c:大小寫敏感;
  3. n:點號 . 不匹配換行符號;
  4. m:多行模式;
  5. x:擴充套件模式,忽略正則表示式中的空白字元。

例:

select regexp_substr('我,aa,BB,cc,','[^,]+',1,3,'c') from dual /*輸出:BB (正則表示式意思是以逗號為分割標準)*/