oracle实现字符串分割

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

  1. CREATE OR REPLACE TYPE ty_str_split IS TABLE OF VARCHAR2 (4000);
  2.  
  3. CREATE OR REPLACE FUNCTION fn_split (p_str IN VARCHAR2, p_delimiter IN VARCHAR2)
  4. RETURN ty_str_split
  5. IS
  6. j INT := 0;
  7. i INT := 1;
  8. len INT := 0;
  9. len1 INT := 0;
  10. str VARCHAR2 (4000);
  11. str_split ty_str_split := ty_str_split ();
  12. BEGIN
  13. len := LENGTH (p_str);
  14. len1 := LENGTH (p_delimiter);
  15.  
  16. WHILE j < len
  17. LOOP
  18. j := INSTR (p_str, p_delimiter, i);
  19.  
  20. IF j = 0
  21. THEN
  22. j := len;
  23. str := SUBSTR (p_str, i);
  24. str_split.EXTEND;
  25. str_split (str_split.COUNT) := str;
  26.  
  27. IF i >= len
  28. THEN
  29. EXIT;
  30. END IF;
  31. ELSE
  32. str := SUBSTR (p_str, i, j - i);
  33. i := j + len1;
  34. str_split.EXTEND;
  35. str_split (str_split.COUNT) := str;
  36. END IF;
  37. END LOOP;
  38.  
  39. RETURN str_split;
  40. END fn_split;
  41. /

测试

  1. DECLARE
  2. CURSOR c
  3. IS
  4. SELECT *
  5. FROM TABLE (CAST (fn_split ('1;;12;;123;;1234;;12345', ';;') AS ty_str_split
  6. )
  7. );
  8.  
  9. r c%ROWTYPE;
  10. BEGIN
  11. OPEN c;
  12.  
  13. LOOP
  14. FETCH c INTO r;
  15.  
  16. EXIT WHEN c%NOTFOUND;
  17. DBMS_OUTPUT.put_line (r.column_value);
  18. END LOOP;
  19.  
  20. CLOSE c;
  21. 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

Oracle の ty_str_split + MySQL の proc_split的更多相关文章

  1. Oracle转MySQL

    1. to_date 直接去掉 例如 select log.id from CM_LOGINLOG log  where log.orgid =?  and log.isAuto =?  and lo ...

  2. Oracle、MySql、SQLServer数据分页查询

    看过此博文后Oracle.MySql.SQLServer 数据分页查询,在根据公司的RegionRes表格做出了 SQLserver的分页查询语句: 别名.字段 FROM( SELECT row_nu ...

  3. oracle迁移mysql数据库注意

    oracle转mysql修改: . substr() substr( string , 0, 10) 这里测试 必须从 第一位获取 既是 substr(string , 1 , 10)2. to_ch ...

  4. Oracle与MySQL的区别

    1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高. 2. Oracle支持大并发,大访 ...

  5. 配置ogg目录索引-oracle与mysql的双向同步步骤

    以下几篇文章描述了利用ogg对oracle与mysql进行双向同步的配置过程以及注意事项,欢迎参考. 配置ogg异构oracle-mysql(1)基础环境配置 http://www.cnblogs.c ...

  6. Loadrunner参数化连接oracle、mysql数据源报错及解决办法

    Loadrunner参数化连接oracle.mysql数据源报错及解决办法 (本人系统是Win7 64,  两位小伙伴因为是默认安装lr,安装在 最终参数化的时候,出现连接字符串无法自动加载出来: 最 ...

  7. oracle转Mysql中,varchar2(10)和number应该转换为什么类型?

    一. varchar2(10)和number应该转换为什么类型? oracle转成mysql时:varchar2(10)可以转成varchar(10)number则要看oracle中存储的具体是什么类 ...

  8. 数据库迁移之从oracle 到 MySQL

    方式一: 手动方式导入导出 手动的方式导入, 就是操作步骤会比较繁琐一些. 对Table 的结构和数据: 1. 使用 SQL Developer 把 oracle 的 table 的schema 和 ...

  9. Oracle使用goldengate分别向Oracle和mysql双路的单向复制

    一.Oracle分别向Oracle和mysql双路的单向复制是在: ORACLE-mysql的单向复制基础上做的.http://blog.csdn.net/q947817003/article/det ...

随机推荐

  1. win32 指令大全

    指令类型 助记符 (带*为特权指令) 对标志寄存器的影响 备注 说明 举例 ZF CF PF SF OF AF DF IF TF 数据传送类 数据传送 MOV 不影响标志位 Move MOV r/m3 ...

  2. ssh密钥的分发之一:ssh-copy-id

    ssh密钥的分发 我们在使用客户端账号对主机记性管理的时候,可以分为以下两种情况: .第一种情况,直接使用root账号: 优点:使用root账号密钥分发简单,指令执行简单 缺点:不安全 .第二种情况, ...

  3. 模拟赛01 T3 盖房子

    题面 http://zhengruioi.com/problem/248 题解 三重容斥(说是两重也行吧) 我们来看题目的约束 ①有k个位置不能放(k≤8) ②每行每列至少一个 ③正负对角线至少一个 ...

  4. 贪心 Codeforces Round #297 (Div. 2) C. Ilya and Sticks

    题目传送门 /* 题意:给n个棍子,组成的矩形面积和最大,每根棍子可以-1 贪心:排序后,相邻的进行比较,若可以读入x[p++],然后两两相乘相加就可以了 */ #include <cstdio ...

  5. jmeter配置mysql数据库步骤

    安装环境: Windows10系统 jmeter版本:3.0版本 java1.8版本 安装步骤: 1.下载连接mysql数据库jar包,地址:http://download.csdn.net/deta ...

  6. [转]VC++的类头文件

    本文转自:http://blog.csdn.net/forevertali/article/details/4370602   animal.h //在头文件中包含类的定义及类成员函数的声明 clas ...

  7. H5图片预览功能

    <html> <head> <meta http-equiv="Content-Type" content="text/html; char ...

  8. vue在使用ajax获取数据时,两种方法(jquery和vue_resource)

    @{    Layout = null;} <!DOCTYPE html> <html><head>    <meta name="viewport ...

  9. web前端怎么样才能入门

    web前端怎么样才能入门,首先我们要从什么是初级web前端工程师说起: 按照我的想法,我把前端工程师分为了入门.初级.中级.高级这四个级别: 入门级别指的是了解什么是前端(前端到底是什么其实很多人还是 ...

  10. 人物丨让小三吐血,让原配泣血——24K渣男郎咸平

    http://url.cn/5swgmythttps://www.toutiao.com/i6650650793743483395人物丨让小三吐血,让原配泣血——24K渣男郎咸平 人物丨让小三吐血,让 ...