Oracle用正則的方式循環切割字符串
需求:有一個這樣子的
Str = “‘CNJ-520-180500000001|CNJ-520-181200000001|CNJ-520-190300000001|CNJ-520-190100000001|CNJ-520-181200000002’”
,然后我需要拿到每一個單號,每一個單號都要走一遍固定的邏輯。
方法:
我們需要使用oracle中的正則表達式
進行字符匹配,去掉“|”這個的特殊符號。
然后還要使用遞歸
子句來執行遞歸操作,以便于完整的操作這個字符串。
為了能夠正常的執行,還需要加上一個遞歸條件。
這個sql大抵是這樣的。
SELECT TRIM(REGEXP_SUBSTR('STR', '[^|]+', 1, LEVEL)) AS single_order
FROM dual
CONNECT BY REGEXP_SUBSTR('STR', '[^|]+', 1, LEVEL) IS NOT NULLAND PRIOR SYS_GUID() IS NOT NULL
START WITH 'STR' IS NOT NULL;
這里面的輸出結果為:
這樣子在使用游標,就可以循環拿到單號,從第一個到最后一個了。
判斷一個字符串中是否包含某個字符串?
首先看到,這個里面是有三個單號,然后是有兩個“|”的。
直接查某一個列,出現了這個符號多少次。
SELECT REGEXP_COUNT(indc003, '\|') 出現多少次
FROM indc_t
WHERE indcent = 99 and indcdocno = 'CNJ-D2B-202308000018'
直接查列名,也可以直接count看一下,如果大于0 就說明是存在的。
使用
- instr(indc003,‘|’) > 0
判斷。