zoukankan      html  css  js  c++  java
  • mysql下将分隔字符串转换为数组

    MySQL存储过程可以用于分割字符串,下面就为您详细介绍这种MySQL存储过程的用法,供您参考学习之用。

    现有一段字符串,如apple,banana,orange,pears,grape,要把它按照逗号(,)分割成:

    apple   banana   orange   pears   grape 

    然后使用where in()方法可以查询。

    1、具体函数:

    # 函数:func_split_TotalLength 

    DELIMITER $$ 

    DROP function IF EXISTS `func_split_TotalLength` $$ 

    CREATE DEFINER=`root`@`%` FUNCTION `func_split_TotalLength` 

    (f_string varchar(1000),f_delimiter varchar(5)) RETURNS int(11) 

    BEGIN 

        # 计算传入字符串的总length 

        return 1+(length(f_string) - length(replace(f_string,f_delimiter,''))); 

    END$$ 

    DELIMITER; 

    # 函数:func_split 

    DELIMITER $$ 

    DROP function IF EXISTS `func_split` $$ 

    CREATE DEFINER=`root`@`%` FUNCTION `func_split` 

    (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; 

    # 存储过程:splitString 

    DELIMITER $$ 

    DROP PROCEDURE IF EXISTS `splitString` $$ 

    CREATE PROCEDURE `splitString` 

    (IN f_string varchar(1000),IN f_delimiter varchar(5)) 

    BEGIN 

    # 拆分结果 

    declare cnt int default 0; 

    declare i int default 0; 

    set cnt = func_split_TotalLength(f_string,f_delimiter); 

    DROP TABLE IF EXISTS `tmp_split`; 

    create temporary table `tmp_split` (`status` varchar(128) not null) DEFAULT CHARSET=utf8; 

    while i < cnt 

    do 

        set i = i + 1; 

        insert into tmp_split(`status`) values (func_split(f_string,f_delimiter,i)); 

    end while; 

    END$$ 

    DELIMITER; 

    2、测试是否能成功分割

    call splitString("apple,banana,orange,pears,grape",","); 

    select * from tmp_split; 

    运行结果如下,说明分割成功:

    mysql> call splitString("apple,banana,orange,pears,grape",",");  
    select * from tmp_split;  
    Query OK, 1 row affected  
    +--------+   | status |   +--------+   | apple  |   | banana |   | orange |   | pears  |   | grape  |   +--------+   5 rows in set  
    mysql> 

    3、应用where in()查询

    # 先传入字符串,分割后保存在临时表tmp_split中   
    call splitString("apple,banana,orange,pears,grape",",");   
       # 将查询的结果作为其他查询的条件来使用   
    select * from fruit where in(select * from tmp_split);   
    以上就是利用MySQL存储过程分割字符串的方法介绍。
  • 相关阅读:
    hdu4612 无向图中随意加入一条边后使桥的数量最少 / 无向图缩点+求树的直径
    Python 之 安装模块的多种方法
    开源项目Universal Image Loader for Android 说明文档 (1) 简单介绍
    IDEA下使用Jetty进行Debug模式调试
    离线安装Cloudera Manager5.3.4与CDH5.3.4(一)
    让你提前认识软件开发(38):完毕第一个新需求
    Windows App开发之经常使用控件与应用栏
    【剑指Offer学习】【面试题58:二叉树的下一个结点】
    【Win】编写简单的bat文件
    【Linux】MySQL解压版安装及允许远程访问
  • 原文地址:https://www.cnblogs.com/waban/p/5196267.html
Copyright © 2011-2022 走看看