Oracle REGEXP_SUBSTR 字串擷取函式的使用
阿新 • • 發佈:2020-12-26
技術標籤:150-Db SQL語言REGEXP_SUBSTROracle
函式作用
使用正則表達是從字串中擷取字串
語法
REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
引數說明:
- String, 原字串
- pattern, 進行匹配的正則表示式
- position, 起始位置, 從第幾個字元開始匹配查詢, 預設為 1
- occurrence, 取第幾次匹配的值。
- modifier , 模式, 可以取的值有
- i 不區分大小寫
- c 區分大小寫 , 預設值
示例
對逗號分隔的字串 11,22,33
按逗號進行分割。
解析:
該處使用正則表示式 [^,]+
- 中括號[] 中的內容代表可選字符集
^
在正則表示式中一般用於匹配輸入字串的開始位置, 但在中括號中代表反選,也就是排除的字元。+
代表匹配一次或多次
所以綜合起來, 以上正則表達是的意義是: 匹配不包含逗號的非空字串。
查詢匹配的第1個值
SELECT REGEXP_SUBSTR('11,12,13','[^,]+',1,1) AS STR FROM DUAL; -- 11
查詢匹配的第2個值
SELECT REGEXP_SUBSTR('11,12,13','[^,]+',1,2) AS STR FROM DUAL; -- 12
查詢匹配的最後一個
在不知道具體長度時,可以結合length和regexp_replace 函式運算出分隔符的數量或是匹配到的總數。
select length('11,12,13')-length(regexp_replace('11,12,13',',','' ))+1 from dual; --3
結合上面的方式, 匹配最後一個值的完整SQL如下:
SELECT REGEXP_SUBSTR('11,12,13','[^,]+',1,length('11,12,13')-length(regexp_replace('11,12,13',',','' ))+1) AS STR FROM DUAL; -- 13