您正在使用 IPV4 [35.168.113.41] 访问本站,您本次已经查看了 1 页
用户名: 密 码: 验证码:     用QQ登录本站
首页 软件 编程 笑话 知识 公告 台风 日历 计算器
[公益]保护绿色环境,构建和谐社会       悟空收录网      

【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中      
[公益] 地球是我家,绿化靠大家      
2024年 清明节 016
2024年 劳动节 043
2025年 元 旦 288
2025年 春 节 316
 
您现在的位置:首页 >> 数据库 >> 内容
本类新增
本类热门
Mysql中find_in_set()函数用法详解以及使用场景
内容摘要: 一、find_in_set()函数详解示例:selectFIND_IN_SET('1','1,2,3');//结果:1selectFIND_IN_SET('3','1,2,3');//结果:3selectFIND_IN_SET('4','1,2,3');//结果:0//后一个包含前一个返回大于0的元素所在位置,不包含前一个则返回0相信大家看完以上示例就知道这......
一、find_in_set()函数详解

示例:

selectFIND_IN_SET('1','1,2,3');

//结果:1

selectFIND_IN_SET('3','1,2,3');

//结果:3

selectFIND_IN_SET('4','1,2,3');

//结果:0

//后一个包含前一个返回大于0的元素所在位置,不包含前一个则返回0

相信大家看完以上示例就知道这个函数的大概作用了,以下是MySQL手册中官方说明

FIND_IN_SET(str,strlist),该函数的作用是查询字段(strlist)中是否包含(str)的结果,

返回结果为null或记录。

str要查询的字符串

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

假如字符串str在由N个子链组成的字符串列表strlist中,则返回值的范围在1到N之间。一个字符串列表

就是一个由一些被’,‘符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是typeSET列,

则FIND_IN_SET()函数被优化,使用比特计算。

如果str不在strlist或strlist为空字符串,则返回值为0。

如任意一个参数为NULL,则返回值为NULL。

这个函数在第一个参数包含一个逗号(,)时将无法正常运行。

概括一下就是(前一个字符串是A,后一个字符串是B):

如果B字符串包含A字符串:则返回大于0的值,这个值就是A字符串在B字符串的所在位置;

如果B字符串不包含A字符串:则返回0;

如果B字符串或者A字符串有任意一个是null,则返回null;

如果A字符串包含逗号,则无法执行。

二、应用场景

就拿若依的权限认证的其中一条sql来给大家举例吧:

SELECTdept_id,parent_id,ancestors,order_num,leader,phoneFROMsys_dept

WHEREdept_id=101orFIND_IN_SET(101,ancestors);

查询结果:

sql想要实现的功能就是查询部门id是101的,或者其他部门的ancestors字段(祖先)中有101的所有部门。使用FIND_IN_SET()函数完全可以实现。

那有的朋友就会说了,为什么不用in或者like呢,区别如下:

三、FIND_IN_SET()和IN、LIKE的区别:

1.IN和FIND_IN_SET的区别:

SELECTdept_id,parent_id,ancestors,order_num,leader,phoneFROMsys_dept

WHERE'101'IN('101,102');

in后面只能跟常量,如果跟字符串的话,就会和字符串的值进行完全匹配,所以上面的sql查询不到记录。

但是find_in_set()函数可以使用常量或字段。

2.like和FIND_IN_SET的区别:

SELECTdept_id,parent_id,ancestors,order_num,leader,phoneFROMsys_dept

WHEREancestorsLIKE'%10%';

SELECTdept_id,parent_id,ancestors,order_num,leader,phoneFROMsys_dept

WHEREFIND_IN_SET(10,ancestors);

like是广泛的模糊匹配,字符串中没有分隔符,Find_IN_SET是精确匹配,字段值会以英文”,”分隔,

Find_IN_SET查询的结果要小于like查询的结果。

版权声明:本内容来源于网络,如有侵犯您的版权,请联系站长,本站收到您的信息后将及时处理。
上一篇:服务器上的mysql实现读取sql文件

 

下一篇:Oracle如何清除一个用户下的所有表

发布日期:2023/3/13
手机扫二维码直达本页
发布时间:14:04:04
点  击:6
录  入:壹家怡园
相关文章
Baidu
YiJiaCMS 7.3.8 build231228(MSSQL) 闽ICP备05000814号-1
本空间由腾讯云(轻量应用服务器)提供,Cloudflare提供加速防护
运行时间载入中.....