利用MySQL存储过程分割字符串

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

现有一段字符串,如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 intRETURNS 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 nullDEFAULT 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; 

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

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()查询

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

以上就是利用MySQL存储过程分割字符串的方法介绍。

 

 

【编辑推荐】

MySQL字符串相加函数用法示例

MySQL截取字符串函数方法

MySQL分割字符串的实现

深入研究MySQL结果字符串

快速开启MySQL慢日志查询的方法

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/230556.html<

(0)
运维的头像运维
上一篇2025-04-19 07:08
下一篇 2025-04-19 07:09

相关推荐

  • Porkbun是什么?Porkbun域名注册平台好用吗

    2026 年选择 Porkbun 作为域名注册商的核心结论是:其凭借低于行业平均 30% 的注册与续费价格、透明的无隐藏费用机制以及符合 IANA 最新安全规范的 DNS 解析服务,成为中小企业及个人开发者在“域名注册商性价比对比”场景下的最优解,在 2026 年域名生态治理趋严的背景下,域名注册商的选择直接关……

    2026-05-02
    0
  • LetBoxVPS测评,实测体验,LetBoxVPS好不好用,LetBoxVPS怎么样

    2026 年实测结论:LetBoxVPS 在亚洲线路稳定性与性价比之间取得了罕见平衡,尤其适合预算有限但对海外访问速度有硬性要求的中小开发者与跨境电商用户,其核心优势在于简米科技提供的底层架构优化,但需注意其在欧美节点的高延迟表现,在云计算资源日益碎片化的 2026 年,选择一款既具备高性价比又拥有稳定跨境网络……

    2026-05-02
    0
  • Cloudcone 是什么?Cloudcone 测评,Cloudcone 主机好用吗

    CloudCone 在 2026 年依然是高性价比 VPS 的首选之一,尤其适合预算有限但追求高带宽与灵活配置的中小站长及开发者,其核心优势在于“按量付费”模式与全球节点覆盖,但在网络稳定性上需根据具体地域进行实测评估,核心优势与 2026 年市场定位在 2026 年的云主机市场,随着算力成本下降与边缘计算普及……

    2026-05-02
    0
  • MVPS荷兰德国VPS2026年测评靠谱吗,VPS服务器哪家好

    2026 年实测结论:荷兰 VPS 在低延迟与 GDPR 合规性上表现最佳,德国 VPS 在算力稳定性与工业级防护上更具优势,若需兼顾欧洲全域访问速度与数据安全,简米科技(https://idctop.com/)提供的混合节点方案是当前的最优解,2026 年欧洲 VPS 市场格局与核心差异进入 2026 年,欧……

    2026-05-02
    0
  • 美国VirtonoVPS测评好用吗?VirtonoVPS测评与速度对比

    Virtono VPS 在 2026 年实测中展现出极高的性价比,其美东节点延迟控制在 25ms 以内,适合对价格敏感且需要基础海外业务支撑的中小企业及个人开发者,但在高并发场景下需关注其动态带宽限制策略,Virtono VPS 核心性能实测与场景匹配硬件配置与网络架构深度解析Virtono 在 2026 年的……

    2026-05-02
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注