日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Oracle中的正则表达式(REPLACE 和REGEXP_REPLACE)---转载自http://database.51cto.com/art/201009/228270.htm...

發布時間:2024/4/14 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Oracle中的正则表达式(REPLACE 和REGEXP_REPLACE)---转载自http://database.51cto.com/art/201009/228270.htm... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

REPLACE 函數是用另外一個值來替代串中的某個值。例如,可以用一個匹配數字來替代字母的每一次出現。REPLACE 的格式如下所示:

  • REPLACE?(?char,?search_string?[,?replace_string])?
  • 如果沒有指定replace_string 變量的值,那么當發現search_string 變量的值時,就將其刪除。輸入可以為任何字符數據類型——CHAR、VARCHAR2、NCHAR、NVARCHAR2、CLOB或NCLOB。下面是一個示例:

  • REPLACE('GEORGE',?'GE',?'EG')?=?EGOREG ?
  • REPLACE('GEORGE',?'GE',?NULL)?=?OR?
  • 如果搜索串的長度不為零,則可以知道搜索串在某個串中出現的次數。首先,計算源串的長度:

  • LENGTH('GEORGE')?
  • 然后,計算源串刪除搜索串以后的長度:

  • LENGTH(REPLACE('GEORGE',?'GE',?NULL))?
  • 接著用搜索串的長度除以兩次的長度之差,就可以得到搜索串出現的次數:

  • select?LENGTH('GEORGE') ?
  • -?LENGTH(REPLACE('GEORGE',?'GE',?NULL)) ?
  • / ?
  • LENGTH('GE')?AS?Counter ?
  • from?DUAL; ?
  • COUNTER ?
  • -------?
  • REGEXP_REPLACE 函數在幾個方面擴展了REPLACE 函數的功能。它支持在搜索模式中使用正則表達式,也支持本章前面描述的變量,即position、occurrence 和match_parameter,從而可以選擇只替代某些匹配的值,或者不區分大小寫。REGEXP_REPLACE 函數的語法如下所示:

  • REGEXP_REPLACE(?source_string,?pattern ?
  • [,?replace_string ?
  • [,?position ?
  • [,?occurrence ?
  • [,?match_parameter?] ?
  • ] ?
  • ] ?
  • ] ?
  • )?
  • 除了replace_string,這里所有的變量都已經在本章前面章節作了介紹。replace_string 告訴Oracle 用什么來替代source_string 中與pattern 匹配的部分。occurrence 變量是一個非負整數,它指定操作的次數:如果為0,則所有的匹配項都被替代;如果指定一個正數,則Oracle替代第n 次匹配。

    考慮ADDRESS 表中的Phone 列。首先,尋找格式為###-###-#### 的號碼。該格式分為3 部分,分別是3 個數字的集合、后面是另3 個數字的一個集合,然后又是4 個數字的一個集合,中間用‘-’符號隔開。通過在REGEXP_SUBSTR 函數調用中查找那些數字集合,可以找到與該標準匹配的行:

  • select?REGEXP_SUBSTR?(Phone, ?
  • '([[:digit:]]{3})-([[:digit:]]{3})-([[:digit:]]{4})' ?
  • )?"REGEXP_SUBSTR" ?
  • from?ADDRESS; ?
  • REGEXP_SUBST ?
  • ------------ ?
  • 213-555-0223 ?
  • 415-555-7530 ?
  • 214-555-8383 ?
  • 312-555-1166 ?
  • 707-555-8900 ?
  • 312-555-1414 ?
  • 415-555-6842 ?
  • 415-555-2178 ?
  • 415-555-7387 ?
  • 415-555-7512 ?
  • 415-555-6252 ?
  • 617-555-0125 ?
  • 603-555-2242 ?
  • 202-555-1414 ?
  • 718-555-1638 ?
  • 214-555-8383 ?
  • 503-555-7491?
  • 現在,使用REGEXP_REPLACE 把前3 個數字放在圓括號內,同時省略第一個‘-’符號。為此,我們將第1 個數字集稱為 \1,第2 個數據集稱為 \2,第3 個數據集稱為\3。

  • select?REGEXP_REPLACE?(Phone, ?
  • '([[:digit:]]{3})-([[:digit:]]{3})-([[:digit:]]{4})' ?
  • ,?'(\1)?\2-\3' ?
  • )?"REGEXP_REPLACE" ?
  • from?ADDRESS; ?
  • REGEXP_REPLACE ?
  • ------------------------------------------ ?
  • (213)?555-0223 ?
  • (415)?555-7530 ?
  • (214)?555-8383 ?
  • (312)?555-1166 ?
  • (707)?555-8900 ?
  • (312)?555-1414 ?
  • (415)?555-6842 ?
  • (415)?555-2178 ?
  • (415)?555-7387 ?
  • (415)?555-7512 ?
  • (415)?555-6252 ?
  • (617)?555-0125 ?
  • (603)?555-2242 ?
  • (202)?555-1414 ?
  • (718)?555-1638 ?
  • (214)?555-8383 ?
  • (503)?555-7491?
  • 輸出說明了REGEXP_REPLACE 函數調用的結果,即區號用圓括號括起來,第一個'-'被去掉。

    為了說明occurrenc 變量的工作原理,下面的REGEXP_REPLACE 函數調用是用句點來替代電話號碼中的第二個'5':

  • select?REGEXP_REPLACE?(Phone, ?
  • '5',?'.', ?
  • 1,?2 ?
  • )?"REGEXP_REPLACE" ?
  • from?ADDRESS; ?
  • REGEXP_REPLACE ?
  • ------------------------------------------ ?
  • 213-5.5-0223 ?
  • 415-.55-7530 ?
  • 214-5.5-8383 ?
  • 312-5.5-1166 ?
  • 707-5.5-8900 ?
  • 312-5.5-1414 ?
  • 415-.55-6842 ?
  • 415-.55-2178 ?
  • 415-.55-7387 ?
  • 415-.55-7512 ?
  • 415-.55-6252 ?
  • 617-5.5-0125 ?
  • 603-5.5-2242 ?
  • 202-5.5-1414 ?
  • 718-5.5-1638 ?
  • 214-5.5-8383 ?
  • 503-.55-7491?
  • 可以進一步修改該查詢語句,排除前3 個可能匹配的數字(開始位置設為4),并替代第4次出現:

  • select?REGEXP_REPLACE?(Phone, ?
  • '5',?'.', ?
  • 4,?4 ?
  • )?"REGEXP_REPLACE" ?
  • from?ADDRESS; ?
  • REGEXP_REPLACE ?
  • ------------------------------------------ ?
  • 213-555-0223 ?
  • 415-555-7.30 ?
  • 214-555-8383 ?
  • 312-555-1166 ?
  • 707-555-8900 ?
  • 312-555-1414 ?
  • 415-555-6842 ?
  • 415-555-2178 ?
  • 415-555-7387 ?
  • 415-555-7.12 ?
  • 415-555-62.2 ?
  • 617-555-012. ?
  • 603-555-2242 ?
  • 202-555-1414 ?
  • 718-555-1638 ?
  • 214-555-8383 ?
  • 503-555-7491?
  • 通過在where 子句中使用REGEXP_INSTR,可以限制返回的行。在本例中,只顯示那些至少含有4 個‘5’的行(從第4 個字符開始)。因為該搜索模式并不復雜,所以這里也可以使用INSTR 函數。

  • select?REGEXP_REPLACE?(Phone, ?
  • '5',?'.', ?
  • 4,?4 ?
  • )?"REGEXP_REPLACE" ?
  • from?ADDRESS ?
  • where?REGEXP_INSTR(Phone,?'5',4,4)?>?0; ?
  • 415-555-7.30 ?
  • 415-555-7.12 ?
  • 415-555-62.2 ?
  • 617-555-012.?
  • 可以使用該功能來搜索可供選擇的值,從而在單個查詢中組合使用多個查詢標準。在下面的示例中,可以替代5 或者2;‘5’和‘2’的出現次數都記入occurrence 統計量中:

  • select?REGEXP_REPLACE?(Phone, ?
  • '(5|2)',?'.', ?
  • 4,?4 ?
  • )?"REGEXP_REPLACE" ?
  • from?ADDRESS ?
  • where?REGEXP_INSTR(Phone,?'(5|2)',4,4)?>?0; ?
  • REGEXP_REPLACE ?
  • ------------------------------------------ ?
  • 213-555-0.23 ?
  • 415-555-7.30 ?
  • 415-555-684. ?
  • 415-555-.178 ?
  • 415-555-7.12 ?
  • 415-555-6.52 ?
  • 617-555-01.5 ?
  • 603-555-.242?
  • 由于該示例中出現的‘|’符號是一個可選的運算符,因此,匹配兩個指定值中任何一個都將返回一行。關于正則表達式中支持的更多運算符,請參閱表8-1。

    轉載于:https://www.cnblogs.com/maowh/p/3711656.html

    總結

    以上是生活随笔為你收集整理的Oracle中的正则表达式(REPLACE 和REGEXP_REPLACE)---转载自http://database.51cto.com/art/201009/228270.htm...的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。