oracle实现字符串分割

功能描述:用指定分隔符切割输入的字符串,返回一维数组,每个数组元素为一个子串。

 CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);

 CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
RETURN ty_str_split
IS
j INT := 0;
i INT := 1;
len INT := 0;
len1 INT := 0;
str VARCHAR2 (4000);
str_split ty_str_split := ty_str_split ();
BEGIN
len := LENGTH (p_str);
len1 := LENGTH (p_delimiter); WHILE j < len
LOOP
j := INSTR (p_str, p_delimiter, i); IF j = 0
THEN
j := len;
str := SUBSTR (p_str, i);
str_split.EXTEND;
str_split (str_split.COUNT) := str; IF i >= len
THEN
EXIT;
END IF;
ELSE
str := SUBSTR (p_str, i, j - i);
i := j + len1;
str_split.EXTEND;
str_split (str_split.COUNT) := str;
END IF;
END LOOP; RETURN str_split;
END fn_split;
/

测试

DECLARE
CURSOR c
IS
SELECT *
FROM TABLE (CAST (fn_split ('1;;12;;123;;1234;;12345', ';;') AS ty_str_split
)
); r c%ROWTYPE;
BEGIN
OPEN c; LOOP
FETCH c INTO r; EXIT WHEN c%NOTFOUND;
DBMS_OUTPUT.put_line (r.column_value);
END LOOP; CLOSE c;
END;

结果

http://blog.csdn.net/a9529lty/article/details/3810905

/************************************************************************/

mysql:

先说调用方法
call proc_split('a,b,c',',');
select * from splittable

存储过程

CREATE  PROCEDURE `proc_split`(
    inputstring varchar(1000),
      delim char(1)
)
      NOT DETERMINISTIC
      CONTAINS SQL
      SQL SECURITY DEFINER
      COMMENT ''
begin
      declare strlen int;
      declare last_index int;
      declare cur_index int;
      declare cur_char VARCHAR(200);
      declare len int;
      set cur_index=1;
      set last_index=0;
    set strlen=length(inputstring);
      drop temporary table if exists splittable;/**/
      create TEMPORARY table splittable(
            id int AUTO_INCREMENT,
            value VARCHAR(20),
            PRIMARY KEY (`ID`),
            UNIQUE KEY `ID` (`ID`)
      ) ;
      WHILE(cur_index<=strlen) DO     
      begin
            if substring(inputstring from cur_index for 1)=delim or cur_index=strlen then
              set len=cur_index-last_index-1;
              if cur_index=strlen then
                 set len=len+1;
              end if;
              insert into splittable(`value`)values(substring(inputstring from (last_index+1) for len));
                  set last_index=cur_index;
            end if;
            set cur_index=cur_index+1;
      END;
      end while;
end

最新文章

  1. JavaScript动画-模拟拖拽
  2. sql server中对xml进行操作
  3. Hadoop 运行 yarn jar 单词统计问题解决
  4. Java基础和JDK5.0新特性
  5. tomcat虚拟路径的几种配置方法
  6. JavaScript DOM 编程艺术(第2版)读书笔记 (7)
  7. 在.net中悄悄执行dos命令,并获取执行的结果(转)
  8. Razor语法学习
  9. XACML-条件评估(Condition evaluation),规则评估(Rule evaluation),策略评估(Policy evaluation),策略集评估(PolicySet evaluation)
  10. python optparse模块
  11. LR(1)表驱动语法分析设计图表
  12. 搭建一个 简易的php版 todolist
  13. 【MySQL】囧,mysql忘记用户密码
  14. BZOJ3389: [Usaco2004 Dec]Cleaning Shifts安排值班
  15. Three Families
  16. iOS开发中关于本地数据中SQLite数据库常用的SQL语句
  17. POJ 1284 Primitive Roots 原根
  18. 从Properties得到数据到gson转换为json
  19. Js 调用 WebService 实例
  20. 关于Spring的注入方式

热门文章

  1. web.xml中classpath*:与classpath:的区别
  2. js 切割逗号
  3. fzu 2204 7 dp
  4. [洛谷p2858] 奶牛零食
  5. 洛谷 P3375 【模板】KMP字符串匹配 || HDU 1686 Oulipo || kmp
  6. mysql学习之通过文件创建数据库以及添加数据
  7. C/C++程序计时函数gettimeofday的使用
  8. [转]如何使用MFC和类型库创建自动化项目
  9. T4308 数据结构判断
  10. Runtime理解