Oracle用正則的方式循環(huán)切割字符串
需求:有一個(gè)這樣子的
Str = “‘CNJ-520-180500000001|CNJ-520-181200000001|CNJ-520-190300000001|CNJ-520-190100000001|CNJ-520-181200000002’”
,然后我需要拿到每一個(gè)單號(hào),每一個(gè)單號(hào)都要走一遍固定的邏輯。
方法:
我們需要使用oracle中的正則表達(dá)式
進(jìn)行字符匹配,去掉“|”這個(gè)的特殊符號(hào)。
然后還要使用遞歸
子句來(lái)執(zhí)行遞歸操作,以便于完整的操作這個(gè)字符串。
為了能夠正常的執(zhí)行,還需要加上一個(gè)遞歸條件。
這個(gè)sql大抵是這樣的。
SELECT TRIM(REGEXP_SUBSTR('STR', '[^|]+', 1, LEVEL)) AS single_order
FROM dual
CONNECT BY
REGEXP_SUBSTR('STR', '[^|]+', 1, LEVEL) IS NOT NULL
AND PRIOR SYS_GUID() IS NOT NULL
START WITH 'STR' IS NOT NULL;
這里面的輸出結(jié)果為:
這樣子在使用游標(biāo),就可以循環(huán)拿到單號(hào),從第一個(gè)到最后一個(gè)了。
判斷一個(gè)字符串中是否包含某個(gè)字符串?
首先看到,這個(gè)里面是有三個(gè)單號(hào),然后是有兩個(gè)“|”的。
直接查某一個(gè)列,出現(xiàn)了這個(gè)符號(hào)多少次。
SELECT REGEXP_COUNT(indc003, '\|') 出現(xiàn)多少次
FROM indc_t
WHERE indcent = 99 and indcdocno = 'CNJ-D2B-202308000018'
直接查列名,也可以直接count看一下,如果大于0 就說(shuō)明是存在的。
使用文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-650063.html
- instr(indc003,‘|’) > 0
判斷。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-650063.html
到了這里,關(guān)于Oracle切割字符串的方法,SQL語(yǔ)句完成。的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!