MySql逗号拼接字符串查询的两种方法

 更新时间:2019年09月16日 14:16:00   作者:guochanof  
这篇文章主要介绍了MySql逗号拼接字符串查询的两种方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

下面两个函数的使用和FIND_IN_SET一样,使用时只需要把FIND_IN_SET换成FIND_PART_IN_SETFIND_ALL_PART_IN_SET

例如某字段里是为1,2,3,4,5 

使用方法:

第一种,传入1,3,6  可以查出来

select * from XXX where FIND_PART_IN_SET('1,3,6','1,2,3,4,5')

第二种,传入1,3,6  查不出来

select * from XXX where FIND_ALL_PART_IN_SET('1,3,6','1,2,3,4,5')

函数:

第一种:只要包含其中一个就可以被查出来

CREATE DEFINER = `root`@`%` FUNCTION `NewProc`(str1 text,str2 text)
 RETURNS text
BEGIN
 #传入两个逗号分割的字符串,判断第二个字符串是否包含第一个字符串split之后的单个
DECLARE CURRENTINDEX INT;#当前下标
DECLARE CURRENTSTR text;
DECLARE result int;
set result = 0;
set CURRENTINDEX = 0;
set CURRENTSTR = '';
IF str1 IS NOT NULL AND str1 != '' THEN
 SET CURRENTINDEX = LOCATE(',',str1);
 WHILE CURRENTINDEX > 0 DO
 SET CURRENTSTR = substring(str1,1,CURRENTINDEX-1);
 if FIND_IN_SET(CURRENTSTR,str2) THEN
  set result = 1;
 end if;
 SET str1 = substring(str1,CURRENTINDEX+1);
 SET CURRENTINDEX = LOCATE(',',str1);
 END WHILE;
 #只传一个 和 最后无逗号的情况
 IF LENGTH(str1) > 0 THEN
 if FIND_IN_SET(str1,str2) THEN
  set result = 1;
 end if;
 END IF;
END IF;
RETURN result;
END;

第二种:必须全部包含才可以被查出来

CREATE DEFINER = `root`@`%` FUNCTION `NewProc`(str1 text,str2 text)
 RETURNS text
BEGIN
 #传入两个逗号分割的字符串,判断第二个字符串是否全部包含第一个字符串split之后的单个
DECLARE CURRENTINDEX INT;#当前下标
DECLARE CURRENTSTR text;
DECLARE RESULT int;
DECLARE TOTALCOUNT int;
DECLARE TRUECOUNT int;
set RESULT = 0;
set CURRENTINDEX = 0;
set CURRENTSTR = '';
set TOTALCOUNT = 0;
set TRUECOUNT = 0;
IF str1 IS NOT NULL AND str1 != '' THEN
 SET CURRENTINDEX = LOCATE(',',str1);
 WHILE CURRENTINDEX > 0 DO
 SET TOTALCOUNT = TOTALCOUNT + 1;
 SET CURRENTSTR = substring(str1,1,CURRENTINDEX-1);
 if FIND_IN_SET(CURRENTSTR,str2) THEN
  SET TRUECOUNT = TRUECOUNT + 1;
 end if;
 SET str1 = substring(str1,CURRENTINDEX+1);
 SET CURRENTINDEX = LOCATE(',',str1);
 END WHILE;
 #只传一个 和 最后无逗号的情况
 IF LENGTH(str1) > 0 THEN
 SET TOTALCOUNT = TOTALCOUNT + 1;
 if FIND_IN_SET(str1,str2) THEN
  SET TRUECOUNT = TRUECOUNT + 1;
 end if;
 END IF;
END IF;
IF TOTALCOUNT > 0 AND TRUECOUNT = TOTALCOUNT THEN 
 SET RESULT = 1;
END IF;
RETURN result;
END;

总结

以上所述是小编给大家介绍的MySql逗号拼接字符串查询的两种方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章

  • Mysql中group by 使用中发现的问题

    Mysql中group by 使用中发现的问题

    当使用MySQL的GROUP BY语句时,根据指定的列对结果进行分组,这种情况通常是由于在 GROUP BY 中选择的字段与其他非聚合字段不兼容,或者在 SELECT 子句中没有正确使用聚合函数所导致的,本文给大家介绍Mysql中group by 使用中发现的问题,感兴趣的朋友跟随小编一起看看吧
    2024-06-06
  • Xampp中mysql无法启动问题的解决方法

    Xampp中mysql无法启动问题的解决方法

    最近有朋友反映遇到了xampp的mysql启动不了这种情况,该怎么办呢,所以下面这篇文章主要给大家介绍了关于Xampp中mysql无法启动问题的解决方法,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-06-06
  • MySQL内连接和外连接及七种SQL JOINS的实现

    MySQL内连接和外连接及七种SQL JOINS的实现

    这篇文章主要介绍了Mysql内连接和外连接的区别以及七种SQL Joins的实现,相信看完这篇文章你对SQL内外连接的多表查询就足够理解了,需要的朋友可以参考下
    2023-03-03
  • MySQL修改lower_case_table_names参数的方法实践

    MySQL修改lower_case_table_names参数的方法实践

    本文主要介绍了MySQL修改lower_case_table_names参数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-05-05
  • mysql慢查询介绍及开启技巧详解

    mysql慢查询介绍及开启技巧详解

    这篇文章主要为大家介绍了mysql慢查询介绍及开启技巧详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • MySQL多表之间字段的匹配实现代码

    MySQL多表之间字段的匹配实现代码

    本文主要介绍下MySQL多表之间字段的匹配;如tag表中name匹配info中的name,接下来详细介绍下,感兴趣的你可以参考下哈
    2013-03-03
  • Mysql数据库的优化详解

    Mysql数据库的优化详解

    这篇文章主要介绍了Mysql数据库的优化详解,查询优化的本质是让数据库优化器为SQL语句选择最佳的执行计划,一般来说,对于在线交易处理(OLTP)系统的数据库,减少数据库磁盘I/O是SQL语句性能优化的首要方法,需要的朋友可以参考下
    2023-07-07
  • MySQL 5.6 中 TIMESTAMP 的变化分析

    MySQL 5.6 中 TIMESTAMP 的变化分析

    这篇文章主要介绍了MySQL 5.6 中 TIMESTAMP 的变化分析,需要的朋友可以参考下
    2015-08-08
  • MySQL 重装MySQL后, mysql服务无法启动

    MySQL 重装MySQL后, mysql服务无法启动

    把mysql程序卸载后, 重装, 结果mysql服务启动不了,碰到这个问题的朋友可以参考下。
    2011-08-08
  • centos6.5中rpm包安装mysql5.7初始化出错的解决方法

    centos6.5中rpm包安装mysql5.7初始化出错的解决方法

    这篇文章主要介绍了centos6.5中rpm包安装mysql5.7初始化出错的解决方法,需要的朋友可以参考下
    2017-09-09

最新评论