oracle 自定义字符串分割函数split()
原创
©著作权归作者所有:来自51CTO博客作者Marydon的原创作品,请联系作者获取转载授权,否则将追究法律责任
1.情景展示
在Oracle当中,如果我们想要对字符串进行分割的话,如何实现?
2.具体分析
Oracle没有现成的内置函数,不过,我们可以自己手动创建一个split()。
如果不想创建函数的话,也可以通过别的方式来实现,具体办法,见文末推荐。
3.解决方案
第一步:创建TYPE类型
CREATE OR REPLACE TYPE TYPE_SPLIT AS TABLE OF VARCHAR2 (4000);
意思是:创建了一个名为TYPE_SPLIT的TABLE类型。
第二步:创建SPLIT函数
CREATE OR REPLACE FUNCTION SPLIT(SPLIT_STRING VARCHAR2, SPLIT_DELIMITER VARCHAR2 := ',')
RETURN TYPE_SPLIT
PIPELINED IS
IDX PLS_INTEGER;
V_STRING VARCHAR2(4000) := SPLIT_STRING;
BEGIN
LOOP
IDX := INSTR(V_STRING, SPLIT_DELIMITER);
IF IDX > 0 THEN
PIPE ROW(SUBSTR(V_STRING, 1, IDX - 1));
V_STRING := SUBSTR(V_STRING, IDX + LENGTH(SPLIT_DELIMITER));
ELSE
PIPE ROW(V_STRING);
EXIT;
END IF;
END LOOP;
END;
完成以上两步,split函数就可以正常使用了。
随后,我们在Functions当中就能够看到该函数啦。
4.效果展示
调用语法:
SELECT * FROM TABLE(SPLIT('待分割字符串','分隔符'))
该表,有且只有一个字段:COLUMN_VALUE,我们可以对其设置别名。
该函数通常在存储过程当中使用,当然,也可以单独使用。
DECLARE
-- 用于存储分隔后的值
DEMO_SPLIT TYPE_SPLIT;
-- 待分隔字符串
STR VARCHAR2(100) := '张三|李四|王五';
-- 统计分隔符在字符串出现的次数
TIMES NUMBER;
BEGIN
-- 将字符串进行分隔
SELECT SPLIT(STR, '|') INTO DEMO_SPLIT FROM DUAL;
--统计分隔符在字符串出现的次数
TIMES := LENGTHB(TRANSLATE(STR, '|' || STR, '|'));
-- 循环打印
FOR I IN 1 .. TIMES + 1 LOOP
DBMS_OUTPUT.PUT_LINE(DEMO_SPLIT(I));
END LOOP;
END;
写在最后
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!
作者:Marydon