Oracle切割字符串的方法,SQL语句完成。

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 NULL
        AND PRIOR SYS_GUID() IS NOT NULL
START WITH 'STR' IS NOT NULL;

这里面的输出结果为:

Oracle切割字符串的方法,SQL语句完成。_第1张图片
这样子在使用游标,就可以循环拿到单号,从第一个到最后一个了。

判断一个字符串中是否包含某个字符串?

Oracle切割字符串的方法,SQL语句完成。_第2张图片

首先看到,这个里面是有三个单号,然后是有两个“|”的。

Oracle切割字符串的方法,SQL语句完成。_第3张图片
直接查某一个列,出现了这个符号多少次。

SELECT REGEXP_COUNT(indc003, '\|') 出现多少次
FROM indc_t
WHERE indcent = 99 and indcdocno = 'CNJ-D2B-202308000018'

Oracle切割字符串的方法,SQL语句完成。_第4张图片
直接查列名,也可以直接count看一下,如果大于0 就说明是存在的。

使用

  • instr(indc003,‘|’) > 0

判断。

你可能感兴趣的:(Oracle数据库,oracle,sql,数据库)