Oracle 字符串分割
分割函数一: 字符串分割: create or replace function 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,av_split)-length(av_split)); else lv_length:=av_index+1; lv_strOfIndex:=substr(lv_str,av_split,av_index)+length(av_split),lv_length)-instr(lv_str,av_index)-length(av_split)); end if; return lv_strOfIndex; end Get_StrArrayStrOfIndex; ? 分割函数二: --本函数可以将“目标字符串”以“指定字符串”进行拆分,并通过表结构返回结果。代码如下: 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; 事例一: select Get_StrArrayLength(‘HJJHTSCYJD_TB13522018,HJJHTSCYJD_2012_TB13632018,HJJHTSCYJD_2013_TB13642018,HJJHTSCYJD_2014_TB13652018,HJJHTSCYJD_2015_TB13662018,HJJHTSCYJD_2016_TB13672018,HJJHTSCYJD_2017_TB16522018‘,‘,‘) from dual; 事例二: select GET_STRARRAYSTROFINDEX(‘HJJHTSCYJD_TB13522018,‘,1) from dual; 事例三: select * from table(splitstr(‘HJJHTSCYJD_TB13522018,‘)); 事例四:对各个表总数据求和 SELECT sum("count") FROM (select count(1) "count" from HJJHTSCYJD_TB13522018 union all select count(1) "count" from HJJHTSCYJD_2012_TB13632018 union all select count(1) "count" from HJJHTSCYJD_2013_TB13642018 union all select count(1) "count" from HJJHTSCYJD_2014_TB13652018 union all select count(1) "count" from HJJHTSCYJD_2015_TB13662018 union all select count(1) "count" from HJJHTSCYJD_2016_TB13672018 union all select count(1) "count" from HJJHTSCYJD_2017_TB16522018); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |