oracle 如何用sql实现split功能

 我来答
仵昱Db
2014-01-19 · TA获得超过712个赞
知道小有建树答主
回答量:146
采纳率:0%
帮助的人:128万
展开全部

本函数可以将“目标字符串”以“指定字符串”进行拆分,并通过表结构返回结果。代码如下:

 

CREATE OR REPLACE TYPE str_split IS TABLE OF VARCHAR2 (4000);
CREATE OR REPLACE FUNCTION splitstr(p_string IN VARCHAR2, p_delimiter IN VARCHAR2)
   RETURN str_split
   PIPELINED
AS
   v_length   NUMBER := LENGTH(p_string);
   v_start    NUMBER := 1;
   v_index    NUMBER;
BEGIN
   WHILE(v_start <= v_length)
   LOOP
       v_index := INSTR(p_string, p_delimiter, v_start);

       IF v_index = 0
       THEN
           PIPE ROW(SUBSTR(p_string, v_start));
           v_start := v_length + 1;
       ELSE
           PIPE ROW(SUBSTR(p_string, v_start, v_index - v_start));
           v_start := v_index + 1;
       END IF;
   END LOOP;

   RETURN;
END splitstr;

创建完毕后,我们来测试一下,例如执行如下SQL:

select * from table(splitstr('Hello,Cnblogs!',','));

其输出结果为一个两行的表,如下图:

百度网友07553bf0
推荐于2018-04-05 · TA获得超过1986个赞
知道大有可为答主
回答量:2464
采纳率:75%
帮助的人:1842万
展开全部
create or replace function tabstr (
p_str in varchar2,
p_sep in varchar2 default ','
)
return tabstr_t
is
l_str long := p_str || p_sep;
l_tabstr tabstr_t := tabstr_t();
begin
while l_str is not null loop
l_tabstr.extend(1);
l_tabstr(l_tabstr.count) := rtrim(substr(
l_str,1,instr(l_str,p_sep)),p_sep);
l_str := substr(l_str,instr(l_str,p_sep)+1);
end loop;
return l_tabstr;
end;
/

试试这个函数
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式