• Oracle拆分字符串,字符串分割的函数。


    第一种:oracle字符串分割和提取

    分割

    复制代码
    create or replace function Get_StrArrayLength
    (
      av_str varchar2,  --要分割的字符串
      av_split varchar2  --分隔符号
    )
    return number
    is
      lv_str varchar2(1000);
      lv_length number;
    begin
      lv_str:=ltrim(rtrim(av_str));
      lv_length:=0;
      while instr(lv_str,av_split)<>0 loop
         lv_length:=lv_length+1;
         lv_str:=substr(lv_str,instr(lv_str,av_split)+length(av_split),length(lv_str));
      end loop;
      lv_length:=lv_length+1;
      return lv_length;
    end Get_StrArrayLength;
    复制代码
     

    提取

    复制代码
    create or replace function Get_StrArrayStrOfIndex
    (
      av_str varchar2,  --要分割的字符串
      av_split varchar2,  --分隔符号
      av_index number --取第几个元素
    )
    return varchar2
    is
      lv_str varchar2(1024);
      lv_strOfIndex varchar2(1024);
      lv_length number;
    begin
      lv_str:=ltrim(rtrim(av_str));
      lv_str:=concat(lv_str,av_split);
      lv_length:=av_index;
      if lv_length=0 then
          lv_strOfIndex:=substr(lv_str,1,instr(lv_str,av_split)-length(av_split));
      else
          lv_length:=av_index+1;
         lv_strOfIndex:=substr(lv_str,instr(lv_str,av_split,1,av_index)+length(av_split),instr(lv_str,av_split,1,lv_length)-instr(lv_str,av_split,1,av_index)-length(av_split));
      end if;
      return  lv_strOfIndex;
    end Get_StrArrayStrOfIndex;
    复制代码

    测试:   select Get_StrArrayStrOfIndex('songguojun$@111111537','$',0) from dual 

    结果:


    第二种:

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

    复制代码
    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!',','));

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

    2009-9-9-11.38.15

    将行转为列显示:

    select a.column_value v1,b.column_value v2 from 
    (select * from (select rownum rn,t.* from table(splitstr('Hello,Cnblogs!',',')) t)) a,
    (select * from (select rownum rn,t.* from table(splitstr('Hello,Cnblogs!',',')) t)) b
    where a.rn=1 and b.rn=2

    如图:

    2009-9-9-11.44.53

  • 相关阅读:
    简简单单的 JavaScript简写技巧
    常用的前端小知识
    nuxt项目部署对静态页重编译问题
    docker 容器部署nuxt项目
    mysql数据库损坏修复问题
    storm supervisor和nimbus启动自动消失的问题
    MATLAB基础知识
    音视频入门-20-BMP、PNG、JPG、GIF静态图生成GIF动态图
    处理树状结构数据以及 React渲染
    React Hooks 获取最新数据问题
  • 原文地址:https://www.cnblogs.com/likeju/p/5016081.html
Copyright © 2020-2023  润新知