`
zy116494718
  • 浏览: 470240 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql中split函数

 
阅读更多

在mysql中并没有split函数,需要自己写:

1)获得按指定字符分割的字符串的个数:

    

DELIMITER $$

DROP FUNCTION IF EXISTS `sims`.`func_get_split_string_total`$$

CREATE DEFINER=`root`@`localhost` FUNCTION `func_get_split_string_total`(
f_string varchar(1000),f_delimiter varchar(5)
) RETURNS int(11)
BEGIN
  declare returnInt int(11);
  if length(f_delimiter)=2  then
     return 1+(length(f_string) - length(replace(f_string,f_delimiter,'')))/2;
  else    
     return 1+(length(f_string) - length(replace(f_string,f_delimiter,'')));
  end if;
END$$

DELIMITER ;

   例:func_get_split_string_total('abc||def||gh','||')  结果为3  

 

    2)得到第i个分割后的字符串。

 

   

DELIMITER $$

DROP FUNCTION IF EXISTS `sims`.`func_get_split_string`$$

CREATE DEFINER=`root`@`localhost` FUNCTION `func_get_split_string`(
f_string varchar(1000),f_delimiter varchar(5),f_order int) RETURNS varchar(255) CHARSET utf8
BEGIN
  declare result varchar(255) default '';
  set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),f_delimiter,1));
  return result;
END$$

DELIMITER ;

   例如:func_get_split_string('abc||def||gh','||',2) 为def

 

 

   3) 需求:A表中的一个字段值为1||2, 在select 时要通过和B字典表的关联得到a,b

   

CREATE DEFINER=`root`@`localhost` FUNCTION `getDictName`(v_str varchar(100)) RETURNS varchar(100) CHARSET utf8
BEGIN
          
          DECLARE i int(4);
          DECLARE dictCode varchar(100);
          DECLARE dictName varchar(100);
          DECLARE returnStr varchar(100); 
        
          set i = 1;
          set returnStr = '';      
          
          if(v_str is null or length(v_str)=0) then
               return returnStr;
          else
          
          while i<=func_get_split_string_total(v_str,'||')
          do
               set dictCode = func_get_split_string(v_str,'||',i);
          
               select names into dictName from sims_dd_dict where code = dictCode; 
          
               set returnStr = concat(returnStr,',',dictName);  -- 这里要用中文的逗号,否则导出EXCEL的时候会串行,因为程序中是以逗号分隔的
          set i = i+1;
          end while;
           
          set returnStr = subString(returnStr,2);          
          return returnStr;
           
          end if;
    END$$

  

     

 

 

 

1
1
分享到:
评论
1 楼 hot66hot 2012-01-11  

相关推荐

    mysql函数split功能实现

    mysql 5.* 的版本现在没有split 函数,但有些地方会用,在这里就简单记录一下

    mysql split函数用逗号分隔的实现

    1:定义存储过程,用于分隔字符串 DELIMITER $$ USE `mess`$$ DROP PROCEDURE IF EXISTS `splitString`$$ CREATE DEFINER=`root`@`%` PROCEDURE `splitString`(IN f_string VARCHAR(1000),IN f_delimiter VARCHAR(5...

    MySQL里实现类似SPLIT的分割字符串的函数

    下边的函数,实现了象数组一样去处理字符串。 一,用临时表作为数组 代码如下: create function f_split(@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20)) as begin while(charindex(@split,@...

    MySql函数-取一个字符串分隔后指定位置的子字符串

    一、函数功能:对字符串进行分隔数组,取指定顺序位置的子字符串,支持左右双向获取,支持...二、函数格式:fn_get_split_val(in_str varchar,in_delimiter varchar,in_order int,in_default varchar) 三、测试用例

    mysql存储过程实现split示例

    代码如下:call PROCEDURE_split(‘分享,代码,片段’,’,’);select * from splittable; 代码如下:drop PROCEDURE if exists procedure_split;CREATE PROCEDURE `procedure_split`( inputstring varchar(1000), ...

    给Oracle添加split和splitstr函数的方法

    最近项目中有很多需要做批量操作的需求,客户端把一组逗号分隔的ID字符串传给数据库,存储过程就需要把它们分割,然后逐个处理。 以往的处理方式有如下几种: 1、在存储过程内写循环,逐个分析字符串中的ID,然后...

    Mysql通过存储过程分割字符串为数组

    分割字符串为数组需要用到 三个mysql 的函数 : REVERSE(str) 返回颠倒字符顺序的字符串str。 SUBSTRING_INDEX(str,delim,count) 返回从字符串str的第count个出现的分隔符delim之后的子串。如果count是正数,返回...

    Mysql字符串截取及获取指定字符串中的数据

    前言:本人遇到一个需求,需要在MySql的字段中截取一段字符串中的特定字符,类似于正则表达式的截取,苦于没有合适的方法,百度之后终于找到一个合适的方法:substring_index(‘www.sqlstudy.com.cn’, ‘.’, -2) ...

    Python3 菜鸟查询手册

    08.31 字符串内建函数 split()方法.png 08.32 字符串内建函数 splitlines()方法.png 08.33 字符串内建函数 startswith()方法.png 08.34 字符串内建函数 strip()方法.png 08.35 字符串内建函数 swapcase()方法....

    用PHP读取文件的正确方法

    诸如 fread 之类的典型函数可能在大多数时候都是最佳的选择,或者当 readfile 刚好能满足任务需要时,您可能会发现自己更为 readfile 的简单所吸引。它实际上取决于所要完成的操作。如果要处理大量数据,fscanf将能...

    ORACLE,mysql,sqlserver,sybase数据库装文本软件

    自己写的数据库装载工具,平时工作中用于装载大文本文件到数据库表,也能直接装载excel,不过excel只能使用第一个sheet,且不支持合并的单元格。 jdk要求版本1.6及以上。 使用方法: java -jar lynload.jar,即可看到...

    php5.3 废弃函数小结

    在php5.3被放弃的函数有: ereg();//直接用mb_ereg代替,或是preg_match代替,但是匹配规则... split(); mysql_close(); // 将不支持全部关闭, 需要改为:mysql_close($link); 您可能感兴趣的文章:Ubuntu12下编译安装

    PHP3程序设计

    9.3.8 preg_split函数 143 9.3.9 模式举例 143 9.3.10 匹配举例 144 9.3.11 替换举例 148 9.3.12 分割举例 150 9.4 MySQL …151 9.4.1 LIKE 151 9.4.2 RLIKE 152 9.5 总结 152 第10章 面向对象 154 10.1 了解类的...

    php网络开发完全手册

    4.2.1 获得日期时间信息的函数getdate 60 4.2.2 获得当前时间的函数 4.2.2 gettimeofday 61 4.2.3 日期验证函数checkdate 61 4.2.4 格式化本地时间日期的函数date 62 4.2.5 获得本地化时间戳的函数mktime 64 4.2.6 ...

    PHP基础教程 是一个比较有价值的PHP新手教程!

    所有变量都是局部变量,为了使得定义的函数中可以使用外部变量,使用global语句。而你要将该变量的作用范围限制在该函数之内,使用static语句。 $g_var = 1 ; // 全局范围 function test() { global $g_var; // 这样...

    asp.net知识库

    存储过程中实现类似split功能(charindex) 通过查询系统表得到纵向的表结构 将数据库表中的数据生成Insert脚本的存储过程!!! 2分法-通用存储过程分页(top max模式)版本(性能相对之前的not in版本极大提高) 分页存储...

    Hadoop硬实战 [(美)霍姆斯著][电子工业出版社][2015.01]_PDF电子书下载 带书签目录 高清完整版.rar )

    技术点82 定位input split 问题 13.2.3 调试JVM 配置 技术点83 解决任务的JVM 启动参数 13.2.4 高效调试的编码准则 技术点84 调试和错误处理 13.3 MapReduce 陷阱 技术点85 MapReduce 反模式 13.4 本...

    03开源NewSql数据库TiDB-Deep Dive into TiDB

    修复部分函数/表达式返回类型和 MySQL 不同的问题 提升对 JDBC 兼容性 支持更多的 `SQL_MODE` 5.DDL 优化 `Add Index` 的执行速度,部分场景下速度大幅度提升 `Add Index` 操作变更为低优先级,降低对线上业务...

    Hadoop实战(第2版)

    技术点79 MapReduce 函数、作业和管道的单元测试13.1.3 LocalJobRunner技术点80 用LocalJobRunner 进行重量级的作业测试13.1.4 集成和QA 测试13.2 调试用户空间的问题13.2.1 访问任务日志技术点81 ...

Global site tag (gtag.js) - Google Analytics