【MySQL】MySQL的find_in_set的使用例子

> 参考的优秀文章

FIND_IN_SET(str,strlist)

> 简单的例子

这个函数的功能是,在第二个参数中寻找第一个参数,并返回第一个参数所在的位置,不存在则返回0。其中,第二个参数是以“,”分隔的字符串。

-- 1select find_in_set(‘1‘, ‘1,2,3,4,5,6‘);

-- 2
select find_in_set(‘2‘, ‘1,2,3,4,5,6‘);
-- 0
select find_in_set(‘7‘, ‘1,2,3,4,5,6‘);
-- 0
select find_in_set(‘2‘, ‘1,21,3,4,5,6‘);
-- 0
select find_in_set(‘2‘, ‘‘);
-- 0
select find_in_set(‘2‘, ‘1,2 ,3,4,5,6‘);
-- NULL
select find_in_set(NULL, ‘1,2,3,4,5,6‘);
-- NULL
select find_in_set(1, NULL);
-- 0
select find_in_set(‘2,3‘, ‘1,2,3,4,5,6‘);

> 可替换分隔字符串的部分使用功能

有时候,我们获取了“2,3,4”字符串,我们想把它根据“,”分隔成5行,每行分别是2、3、4。

这时候,我们自然想到类似Java的String的split的函数,可是MySQL貌似并无类似的函数。(我没有找到,如果有的话请通知我哦)

而实际上,“2,3,4”是有一定业务意义的,或者说出自某一张表的,那么可以使用find_in_set把“2,3,4”从对应的表中查找出来。一般来说,该键有索引,从大量的数据找出少量的数据,效率是很高的。

下面是简单的例子:

select t.id from
(
select 1 as id, ‘nick‘ as name
union all
select 2 as id, ‘viki‘ as name
union all
select 3 as id, ‘robin‘ as name
union all
select 4 as id, ‘teng‘ as name
union all
select 5 as id, ‘mike‘ as name
union all
select 6 as id, ‘will‘ as name
) t
where find_in_set(t.id, ‘2,3,4‘) > 0;

时间: 2024-10-15 12:02:17

【MySQL】MySQL的find_in_set的使用例子的相关文章

Mysql中使用FIND_IN_SET解决IN条件为字符串时只有第一个数据可用的问题

今天在使用Mysql的存储过程处理数据的批量删除时,遇到了WHERE条件中使用IN(strlist)时(strlist为逗号分隔的字符串),只有strlist的第一个元素才有效的问题,现在将问题和解决方法做下记录. 我们首先创建两张表userinfo(用户信息表)和userextinfo(用户扩展信息表),其中userextinfo表的UserID字段为外键对应userinfo表中的UserID字段 用户信息表userinfo 初始数据 用户扩展信息表userextinfo 初始数据 现在表中有

Mysql字符串函数FIND_IN_SET()的两点用法

概要:该可以查询用逗号分割的字段,以及对结果进行强制排序 首先看一张表: colid vyear area cast ,31,32,21,12 2014 1 15 ,32,33,34,35,21, 2014 2 16 ,33,34,36,39,40 2011 3 17 表中的colid字段的值是以逗号分割, 当我们需要查询这张表中,colid含有32的行, 那么可以用FIND_IN_SET() SQL如下: SELECT * FROM table WHERE FIND_IN_SET('32',

Mysql中使用find_in_set函数查找字符串

mysql有个表的字段的存储是以逗号分隔的,如domain字段login.s01.yy.com,s01.yy.com,s02.yy.com.现在要查找s01.yy.com这个.我们用like查找好像不是非常准确.那就试试mysql中的find_in_set函数吧. SELECT find_in_set('a','a,b,c,d') as test

MySql 中的 FIND_IN_SET 的使用和相关问题

MySql 中的 FIND_IN_SET 的使用和相关问题 QQ 群里有人讨论如果在 category_ids 中打开 12 的分类,而 category_ids 中的 ID 是以 逗号分开的. 使用 LIKE 一定是不行的. 于是我找了一下,发一个 FIND_IN_SET 的函数1,可以在 SQL 中找到相关对应的 ID. SELECT * FROM `fa_test` WHERE FIND_IN_SET(12,`category_ids` ) LIMIT 0, 1000 而且 FastAdm

解决mysql报错Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’

启动mysql 报错: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 1.先查看 /etc/rc.d/init.d/mysqld status 看看m y s q l 是否已经启动.另外看看是不是权限问题. 2.确定你的mysql.sock是不是在那个位置,mysql -u 你的mysql用户名 -p -S /var/lib/mysql/

mysql Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

错误原因:/var/lib/mysql目录中socket文件不存在.连接mysql服务器有两种方式:tcp连接,通过socket文件连接.通过socket文件,启动mysql服务,mysql服务会自动生成一个sock文件,生成的sock文件默认放在 --datadir=/var/lib/mysql,mysql默认从/var/lib/mysql目录读取sock文件. 解决办法:1.看看/var/lib/mysql/mysql 有没有mysql.sock文件2.没有mysql.sock,重启mysq

[MySQL] MySQL的自动化安装部署

有过MySQL运维的人应该都清楚,线上的MySQL一般都采用源码编译,因为这样才可以根据企业的各自需要选择要编译的功能,虽然MySQL的源码编译挺简单的,但是试想一下,如果你有几百台服务器同时要安装MySQL,难道你还一台台去手动编译.编写配置文件吗?这显然太低效了,本文讨论MySQL的自动化安装部署. 1.制作符合自己需求的RPM包 我们要根据MySQL的源码编译符合企业需求的RPM包,源码获取命令如下: wget http://downloads.mysql.com/archives/get

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

在Centos系统输入mysql回车出现以下错误的解决方法: MYSQL错误:ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 解决方法一: 如果是以yum方法安装: 直接service mysqld start启动后 再输入mysql命令可进入mysql数据库 Can't connect to local MySQL server thro

服务器数据库挂掉 Can 't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock '(2) ";

刚刚遇到这个报错,我无语了,我这么个菜逼,咋解决,还好师兄(付付)解决了,付付真棒,在此记录一下,以供学习 Can 't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock '(2) "; 1.查日志(首先还是看error.log),我看了一遍,继续急,师兄看了一遍 2. can't create /write to file 'tmp'  ,fk,就是/tmp的权限问题,害我干着急 3.报这个错误的原因

Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’ (2)的解决方法

在连接数据库时,报这个错误,是/var/lib/mysql/ 目录下没有mysql.sock文件,在服务器搜索myslq.sock文件,我的是在/tmp/mysql.sock 解决方法是加一个软链: ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock 搞定,收工!