String ORACLE PL-SQL如何拆分字符串并使用函数返回列表
如何拆分给定分隔符的给定字符串 例: 输入 字符串=>'1,2,3,4,5' 分隔符=>',' 输出 一, 2. 3. 4.String ORACLE PL-SQL如何拆分字符串并使用函数返回列表,string,function,plsql,split,tokenize,String,Function,Plsql,Split,Tokenize,如何拆分给定分隔符的给定字符串 例: 输入 字符串=>'1,2,3,4,5' 分隔符=>',' 输出 一, 2. 3. 4. 5我找到了自己的方法,使用函数拆分给定字符串 类型应声明如下: TYPE tabsplit IS TABLE OF VARCHAR2 (50) INDEX BY BINARY_INTEGER; DECLARE taboutput tabsplit; BEGIN taboutput := fn_split ('
5我找到了自己的方法,使用函数拆分给定字符串 类型应声明如下:
TYPE tabsplit IS TABLE OF VARCHAR2 (50)
INDEX BY BINARY_INTEGER;
DECLARE
taboutput tabsplit;
BEGIN
taboutput := fn_split ('1,2,3,4,5', ',');
FOR i IN 0 .. taboutput.COUNT - 1
LOOP
DBMS_OUTPUT.put_line (taboutput (i));
END LOOP;
END;
函数应该这样写:
FUNCTION fn_split (mp_string IN VARCHAR2, mp_delimiter IN VARCHAR2)
RETURN tabsplit
IS
ml_point NUMBER (5, 0) := 1;
ml_sub_str VARCHAR2 (50);
i NUMBER (5, 0) := 1;
taboutput tabsplit;
ml_count NUMBER (5, 0) := 0;
BEGIN
WHILE i <= LENGTH (mp_string)
LOOP
FOR j IN i .. LENGTH (mp_string)
LOOP
IF SUBSTR (mp_string, j, 1) = mp_delimiter
THEN
ml_sub_str := SUBSTR (mp_string, ml_point, j - ml_point);
ml_point := j + 1;
i := ml_point;
i := i - 1;
taboutput (ml_count) := ml_sub_str;
ml_count := ml_count + 1;
EXIT;
END IF;
END LOOP;
i := i + 1;
END LOOP;
ml_sub_str := SUBSTR (mp_string, ml_point, LENGTH (mp_string));
taboutput (ml_count) := ml_sub_str;
RETURN taboutput;
END fn_split;
这个怎么样?正则表达式也允许空列表元素
SQL> with tbl(str) as (
2 select '1,2,,4,5' from dual
3 )
4 select regexp_substr(str, '(.*?)(,|$)', 1, level, null, 1) element
5 from tbl
6 connect by level <= regexp_count(str, ',')+1;
ELEMENT
--------
1
2
4
5
SQL>
SQL>以tbl(str)作为(
2从双通道中选择“1,2,4,5”
3 )
4选择regexp_substr(str,(.*)(,|$)',1,level,null,1)元素
5来自tbl
6.分层连接
有关返回列表元素的函数,请参阅本文:这太酷了。。如果你能把它放在一个函数中,那将非常有用。。谢谢你的解决方案,我更新了一篇文章,其中有一个链接指向上一篇文章,我展示了一个返回列表元素的函数。这基本上就是你要找的。嗨,玛杜卡。这个答案出现在低质量队列中,因为它应该提供关于代码为什么和/或如何回答问题的附加上下文,以提高其长期价值。亲切的问候。
SELECT LEVEL AS id, REGEXP_SUBSTR('A,B,C,D', '[^,]+', 1, LEVEL) AS data
FROM dual
CONNECT BY REGEXP_SUBSTR('A,B,C,D', '[^,]+', 1, LEVEL) IS NOT NULL;