京东6.18大促主会场领京享红包更优惠

 找回密码
 立即注册

QQ登录

只需一步,快速开始

mysql中find_in_set()函数用法及自定义增强函数

2024-11-3 04:42| 发布者: f5db4| 查看: 42| 评论: 0

摘要: 目录一、find_in_set()二、FIND_PART_IN_SET三、FIND_ALL_PART_IN_SET一、find_in_set() 我们知道mysql提供了一个好用的函数 FIND_IN_SET(str,strlist), 该函数的作用是查询字段(strlist)中是否包罗(str)的结果,返
目录

一、find_in_set()

我们知道mysql提供了一个好用的函数

FIND_IN_SET(str,strlist),

该函数的作用是查询字段(strlist)中是否包罗(str)的结果,
返回结果为null或记录 。

str 要查询的字符串
strlist 需查询的字段,参数以”,”分隔,例如如 '1,2,3'。

下面有一组示例

[code]select FIND_IN_SET('1', '1,2,3'); // 结果:1 select FIND_IN_SET('3', '1,2,3'); // 结果:3 select FIND_IN_SET('4', '1,2,3'); // 结果:0 // 后一个包罗前一个返回大于0的元素地点位置,不包罗前一个则返回0[/code]

我们一样寻常在查询的where条件使用 FIND_IN_SET(str,strlist)>0,则阐明strlist包罗str

但是这个函数的第一个参数只能判断是单个字符串,假如我有以下需求

1. 判断字符串 '1,3' 中的元素是否有恣意一个元素存在字符串 '1,3,4,5,7',意思就是1大概3只要有恣意一个存在字符串 '1,3,4,5,7' 中就算匹配乐成。

2. 再比如判断字符串 '1,3,5' 中的全部元素是否都存在于字符串 '1,3,4,5,7' 中,即1,3,5每个元素都要在 字符串 '1,3,4,5,7'中能找到才算匹配乐成。

针对需求1,提供了一个叫 FIND_PART_IN_SET  的函数

针对需求2,提供了一个叫 FIND_ALL_PART_IN_SET 的函数

二、FIND_PART_IN_SET

[code]CREATE FUNCTION `FIND_PART_IN_SET`(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)>0 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)>0 THEN set result = 1; end if; END IF; END IF; RETURN result; END;[/code]

现实调用判断FIND_PART_IN_SET(str1 ,str2)>0即可,例如FIND_PART_IN_SET('1,3' , '1,3,4,5')>0

三、FIND_ALL_PART_IN_SET

[code]CREATE FUNCTION `FIND_ALL_PART_IN_SET`(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)>0 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)>0 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;[/code]

现实调用判断FIND_ALL_PART_IN_SET(str1 ,str2)>0即可,例如FIND_PART_IN_SET('1,3,5' , '1,3,4,5,7')>0 

到此这篇关于mysql中find_in_set()函数用法及自定义增强函数的文章就先容到这了,更多相干mysql find_in_set()内容请搜索脚本之家从前的文章或继承欣赏下面的相干文章盼望各人以后多多支持脚本之家!


来源:https://www.jb51.net/database/325848ida.htm
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
关闭

站长推荐上一条 /6 下一条

QQ|手机版|小黑屋|梦想之都-俊月星空 ( 粤ICP备18056059号 )|网站地图

GMT+8, 2025-7-1 20:09 , Processed in 0.040100 second(s), 18 queries .

Powered by Mxzdjyxk! X3.5

© 2001-2025 Discuz! Team.

返回顶部