oracle中使用function实现拆分字符串的功能

1.创建type:

SQL> create or replace type test_type_split as table of varchar2(50);
  2  /

Type created.

2.创建function:

​
SQL> create or replace function test_split
  2  (
  3  test_p_list varchar2,  --要分割的字符串
  4  test_p_sep varchar2 := ','  --分隔符,这里可以不用赋值,直接调用的时候给参数就行
  5  ) return test_type_split pipelined    --返回的管道是一个集合
  6  is
  7  test_list varchar2(50) := test_p_list;   --把test_p_list的值赋给test_list,下面对test_list进行操作
  8  begin
  9  pipe row(substr(test_p_list, 0 , instr(test_p_list, test_p_sep)-1));
 10  loop
 11  test_list := substr(test_list, instr(test_list, test_p_sep)+1,length(test_list)-instr(test_list, test_p_sep)+1);
 12  exit when instr(test_list,test_p_sep)=0;
 13  pipe row(substr(test_list, 0, instr(test_list, test_p_sep)-1));
 14  end loop;
 15  pipe row(test_list);
 16  return;
 17  end test_split;
 18  /

Function created.

​

3.测试:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Oracle ,您可以使用 `SUBSTR`、`INSTR` 和 `REGEXP_SUBSTR` 等函数来根据指定字符字符串。 1. 使用 `SUBSTR` 和 `INSTR` 函数 `SUBSTR` 函数可以返回一个字符串的子串,`INSTR` 函数可以返回一个字符串指定子串的开始位置。通过不断调用这两个函数,您可以将一个字符串分成多个子串。 例如,要将字符串 `ABC,DEF,GHI` 按逗号分成多个子串,您可以使用以下 SQL 代码: ``` WITH data AS ( SELECT 'ABC,DEF,GHI' AS str FROM dual ) SELECT SUBSTR(str, 1, INSTR(str, ',', 1, level) - 1) AS col1, SUBSTR(str, INSTR(str, ',', 1, level) + 1, INSTR(str, ',', 1, level+1) - INSTR(str, ',', 1, level) - 1) AS col2, SUBSTR(str, INSTR(str, ',', 1, level+1) + 1) AS col3 FROM data CONNECT BY level <= LENGTH(str) - LENGTH(REPLACE(str, ',', '')) + 1; ``` 上述 SQL 代码将字符串 `ABC,DEF,GHI` 按逗号分成三列,分别为 `ABC`、`DEF` 和 `GHI`。 2. 使用 `REGEXP_SUBSTR` 函数 `REGEXP_SUBSTR` 函数可以根据正则表达式来提取字符串的子串。通过使用逗号作为分隔符的正则表达式,您可以将一个字符串分成多个子串。 例如,要将字符串 `ABC,DEF,GHI` 按逗号分成多个子串,您可以使用以下 SQL 代码: ``` WITH data AS ( SELECT 'ABC,DEF,GHI' AS str FROM dual ) SELECT REGEXP_SUBSTR(str, '[^,]+', 1, 1) AS col1, REGEXP_SUBSTR(str, '[^,]+', 1, 2) AS col2, REGEXP_SUBSTR(str, '[^,]+', 1, 3) AS col3 FROM data; ``` 上述 SQL 代码将字符串 `ABC,DEF,GHI` 按逗号分成三列,分别为 `ABC`、`DEF` 和 `GHI`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QYHuiiQ

听说打赏的人工资翻倍~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值