博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用MySQL存储过程分割字符串
阅读量:6883 次
发布时间:2019-06-27

本文共 1964 字,大约阅读时间需要 6 分钟。

(转)

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

apple
banana
orange
pears
grape

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

1、具体函数: 

  1. # 函数:func_split_TotalLength
  2. DELIMITER $$
  3. DROP function IF EXISTS `func_split_TotalLength` $$
  4. CREATE DEFINER=`root`@`%` FUNCTION `func_split_TotalLength`
  5. (f_string varchar(1000),f_delimiter varchar(5)) RETURNS int(11)
  6. BEGIN
  7. # 计算传入字符串的总length
  8. return 1+(length(f_string) - length(replace(f_string,f_delimiter,'')));
  9. END$$
  10. DELIMITER;
  1. # 函数:func_split
  2. DELIMITER $$
  3. DROP function IF EXISTS `func_split` $$
  4. CREATE DEFINER=`root`@`%` FUNCTION `func_split`
  5. (f_string varchar(1000),f_delimiter varchar(5),f_order int) RETURNS varchar(255) CHARSET utf8
  6. BEGIN
  7. # 拆分传入的字符串,返回拆分后的新字符串
  8. declare result varchar(255) default '';
  9. set result = reverse(substring_index(reverse(substring_index(f_string,f_delimiter,f_order)),f_delimiter,1));
  10. return result;
  11. END$$
  12. DELIMITER;
  1. # :splitString
  2. DELIMITER $$
  3. DROP PROCEDURE IF EXISTS `splitString` $$
  4. CREATE PROCEDURE `splitString`
  5. (IN f_string varchar(1000),IN f_delimiter varchar(5))
  6. BEGIN
  7. # 拆分结果
  8. declare cnt int default 0;
  9. declare i int default 0;
  10. set cnt = func_split_TotalLength(f_string,f_delimiter);
  11. DROP TABLE IF EXISTS `tmp_split`;
  12. create temporary table `tmp_split` (`status` varchar(128) not null) DEFAULT CHARSET=utf8;
  13. while i < cnt
  14. do
  15. set i = i + 1;
  16. insert into tmp_split(`status`) values (func_split(f_string,f_delimiter,i));
  17. end while;
  18. END$$
  19. DELIMITER;

2、测试是否能成功分割

  1. call splitString("apple,banana,orange,pears,grape",",");
  2. select * from tmp_split;

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

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

3、应用where in()查询

    1. # 先传入字符串,分割后保存在tmp_split中
    2. call splitString("apple,banana,orange,pears,grape",",");
    3. # 将查询的结果作为其他查询的条件来使用
    4. select * from fruit where in(select * from tmp_split);

转载于:https://www.cnblogs.com/hyzhou/p/4511690.html

你可能感兴趣的文章
nginx gzip压缩
查看>>
不要在该约炮的年纪谈佛系
查看>>
c++SDK c#调用_疑难杂症
查看>>
Git初始化项目 和 Gitignore
查看>>
CMakeList.txt设置OpenCv路径
查看>>
springboot mvc beetl模板 自定义错误的后缀问题
查看>>
ext常用属性
查看>>
PL/SQL连接64位Oracle配置方法
查看>>
socket解读,http和socket之长连接和短连接区别!
查看>>
洛谷——P1165 日志分析
查看>>
[GeekBand] C++ 基础知识之 The Big Three
查看>>
react Promise && Ref learning
查看>>
最长上升子序列(NlogN)总结
查看>>
数据结构与算法----->算法----->递归与归并排序算法
查看>>
解决Android编译时出现aapt.exe finished with non-zero exit value 1
查看>>
【Spring源码分析系列】启动component-scan类扫描加载过程
查看>>
开灯问题
查看>>
NBUT[1220] SPY
查看>>
bzoj2333[SCOI2011]棘手的操作
查看>>
webpack安装教程及实例
查看>>