Oracle中分割字符串的方法

Posted @素素~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle中分割字符串的方法相关的知识,希望对你有一定的参考价值。

Oracle中分割字符串的方法

1. 使用 regexp_substr() 函数

1.1 方式1

  • 如下:
    select regexp_substr('bbb,aaa,ccc', '[^,]+', 1, level) as split_result
      from dual
    connect by level <=
               length('bbb,aaa,ccc') - length(replace('bbb,aaa,ccc', ',')) + 1;
    

1.2 方式2

  • 如下:

    select regexp_substr(replace('aaa;bbb;ccb', '', ';'), '[^;]+', 1, level) as split_result
       from dual
     connect by level <= regexp_count('aaa;bb;', ';') + 1;
    

    或者 with 写法,如下

    with temp as
     (select 'bbb,aaa,ccc' as str from dual)
    select regexp_substr(replace(str, ',', ' ,'), '[^,]+', 1, level)
      from temp
    connect by level <= regexp_count(str, ',') + 1
    

1.3 注意问题(尤其是存储过程中用到,可能会入坑)

  • 问题情况(可能会出现空行),如下:

  • 解决问题:
    上述空行不是我们所需要的,所以排除即可,如下:

    select split_result,length(split_result) from (
     select regexp_substr(replace('aaa;bb;', '', ';'), '[^;]+', 1, level) as split_result
       from dual
     connect by level <= regexp_count('aaa;bb;', ';') + 1)
     where split_result is not null;
    


2. 自定义函数

2.1 自定义类型 table

  • 如下:
    create or replace type result_split_list as table of varchar2(100);
    

2.2 自定义函数

2.2.1 自定义函数

  • 如下:
    create or replace function split_strs(strs varchar2, type_split varchar2)
      return result_split_list
      pipelined is
      index_num  pls_integer;
      str_list varchar2(100) := strs;
    begin
      loop
        index_num := instr(str_list, type_split);
        if index_num > 0 then
          pipe row(substr(str_list, 1, index_num - 1));
          str_list := substr(str_list, index_num + length(type_split));
        else
          pipe row(str_list);
          exit;
        end if;
      end loop;
      return;
    end split_strs;
    

2.2.2 效果如下:

  • 如下:

2.3 Oracle查看<Collection> 类型数据

  • 上面的效果我们看到查看到的是<Collection> 类型,不方便查看数据,处理如下:
    select * from table (select split_strs('aaa,bbb,ccc',',') from dual);
    

3.

关于java中分割字符串

例子:String path = "123.456.789";

如果要使用“.”将path分割成String[],

path.split("//.");

or

path.split("//.");

split中传入的是正则表达式,则需要对特殊符号进行转义,但是在实际使用过程中,有时会出现无法分割的情况。

可以使用org.apache.commons.lang.StringUtils.split(path,".")方法。

以上是关于Oracle中分割字符串的方法的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据中分页的sql语句

用oracle在mybatis中分页sql怎么写

sql 在表格中分割新的日期范围分区

ORACLE:在同一条语句中分配和检查

python中分割字符串

oracle中分页查询