mysql中find_in_set()函数的利用及in()用法详解上海时

MySQL手册中find_in_set函数的语法:

FIND_IN_SET(str,strlist)

str 要询问的字符串
strlist 字段名 参数以”,”分隔 如 (1,2,6,8)
查询字段(strlist)中包括(str)的结果,再次回到结果为null或记录

一经字符串str在由N个子链组成的字符串列表strlist 中,则重回值的界定在 1 到 N 之间。 一个字符串列表正是贰个由一些被 ‘,’ 符号分开的子链组成的字符串。假设第3个参数是贰个常数字符串,而第4个是type SET列,则FIND_IN_SET() 函数被优化,使用比特计算。 若是str不在strlist 或strlist 为空字符串,则重回值为 0 。如随意贰个参数为NULL,则重回值为 NULL。那一个函数在率先个参数包蕴多个逗号(‘,’)时将不恐怕平常运转。


 例子:
mysql> SELECT FIND_IN_SET('b', 'a,b,c,d'); 
-> 2 因为b 在strlist集结中放在2的地点 从1初步

select FIND_IN_SET('1', '1'); 重回 即是1 那儿的strlist集结有一点新鲜 唯有一个字符串 其实就是供给前叁个字符串 应当要在后叁个字符串集结中才回去大于0的数 
select FIND_IN_SET('2', '1,2'); 返回2 
select FIND_IN_SET('6', '1'); 返回0


注意: 
select * from treenodes where FIND_IN_SET(id, '1,2,3,4,5'); 
使用find_in_set函数二回回到多条记录 
id 是八个表的字段,然后每条记下分别是id等于1,2,3,4,5的时候 
稍微类似in (集结) 
select * from treenodes where id in (1,2,3,4,5);


弄个测验表来申明二者的不同

使用find_in_set函数一回回到多条记下 id 是贰个表的字段,然后每条记下分别是id等于1,2,3,4,5的时候 有一点点类似in (集结)

select * from article where FIND_IN_SET('4',type)

结果:

上海时时乐走势图官网 1

find_in_set()和in的区别:

弄个测量试验表来注解二者的分别

CREATE TABLE `tb_test` (
  `id` int(8) NOT NULL auto_increment,
  `name` varchar(255) NOT NULL,
  `list` varchar(255) NOT NULL,
  PRIMARY KEY  (`id`)
);

INSERT INTO `tb_test` VALUES (1, 'name', 'daodao,xiaohu,xiaoqin');
INSERT INTO `tb_test` VALUES (2, 'name2', 'xiaohu,daodao,xiaoqin');
INSERT INTO `tb_test` VALUES (3, 'name3', 'xiaoqin,daodao,xiaohu');

原本以为mysql能够拓宽如此的查询:

SELECT id,name,list from tb_test WHERE 'daodao' IN(list); -- (一) 

上海时时乐走势图官网 2

实在那样是分外的,那样唯有当list字段的值等于'daodao'时(和IN前边的字符串完全合作),查询才使得,不然都得不到结果,即使'daodao'真的在list中。

再来看看这些:

SELECT id,name,list from tb_test WHERE 'daodao' IN ('libk', 'zyfon', 'daodao'); -- (二)

 

上海时时乐走势图官网 3

那样是能够的。

这两条到底有怎么着界别吧?为何第一条无法获得不错的结果,而第二条却能博得结果。原因实在是(一)中 (list) list是变量, 而(二)中 ('libk', 'zyfon', 'daodao')是常量。
据此一旦要让(一)能科学工作,需求用find_in_set():

SELECT id,name,list from tb_test WHERE FIND_IN_SET('daodao',list); -- (一)的改进版

上海时时乐走势图官网 4

总结:
因而借使list是常量,则足以一向用IN, 否则要用find_in_set()函数。


个例子来讲:

如此就能够落得我们预料的机能,难题就解决了!

有个小说表里面有个type字段,它存款和储蓄的是作品类型,有 1头条、2推荐、3火热、4图像和文字等等 。
现行有篇作品他既是头条,又是走俏,依然图文,type中以 1,3,4 的格式存款和储蓄。那我们怎么样用sql查找全数type中有4的图文类型的稿子吧?? 
那就要大家的 find_in_set 出马的时候到了。以下为援引的剧情:

select id, list, name from table where 'daodao' IN ('libk', 'zyfon', 'daodao');

查询字段(strlist)中包括(str)的结果,重临结果为null或记录

前些天无意之中见到了该函数,认为挺有用的一个函数,这里记录一下。

也便是那五个sql是询问的功能是完全一样的:

mysql> SELECT FIND_IN_SET('b', 'a,b,c,d'); 
-> 2 因为b 在strlist集合中放在2的位置 从1开始
select FIND_IN_SET('1', '1'); 返回 就是1 这时候的strlist集合有点特殊 只有一个字符串 其实就是要求前一个字符串 一定要在后一个字符串集合中才返回大于0的数 
select FIND_IN_SET('2', '1,2'); 返回2 
select FIND_IN_SET('6', '1'); 返回0

find_in_set()和like的区别:

在mysql中,有的时候大家在做数据库查询时,须求获得某字段中包蕴某些值的记录,不过它亦不是用like能消除的,使用like恐怕查到大家不想要的记录,它比like更加精准,那时候mysql的FIND_IN_SET函数就派上用场了,上面来看二个例子。

创办表并插入语句:

CREATE TABLE users(
    id int(6) NOT NULL AUTO_INCREMENT,
    name VARCHAR(20) NOT NULL,
    limits VARCHAR(50) NOT NULL, -- 权限
    PRIMARY KEY (id)
);

INSERT INTO users(name, limits) VALUES('小张','1,2,12'); 
INSERT INTO users(name, limits) VALUES('小王','11,22,32');

其间limits表示客商所具备的权柄(以逗号分隔),今后想查询全体权力编号为2的客户,假诺用like关键字的话,则查询结果如下:

SELECT * FROM users WHERE limits LIKE '%2%';

上海时时乐走势图官网 5

那般第二条数据不享有权限'2'的顾客也查出来了,不切合预期。上面选取mysql 函数find_in_set()来解决。

SELECT * FROM users WHERE FIND_IN_SET(2,limits);

上海时时乐走势图官网 6

如此就能够落得我们预料的效应,难题就化解了!

注意:mysql字符串函数 find_in_set(str1,str2)函数是回来str第22中学str1所在的岗位索引,str2必得以","分割开。

总结:like是周围的歪曲相配,字符串中未有分隔符,Find_IN_SET 是纯粹相称,字段值以日文”,”分隔,Find_IN_SET查询的结果要小于like查询的结果。

 

select FIND_IN_SET('1', '1'); 再次来到 正是1 那时的strlist会集有一些异样 独有叁个字符串 其实就是须要前贰个字符串 必定要在后三个字符串集结中 才回去 大于0的数

 此中limits表示顾客所享有的权柄(以逗号分隔),以后想询问全体权力编号为2的顾客,假如用like关键字的话,则查询结果如下:

SELECT userid,username,userrole 角色 FROM `user` WHERE find_in_set('2',userrole)

有个小说表里面有个type字段,它存款和储蓄的是小说类型,有 1头条、2推荐、3火爆、4图像和文字...1,12,13 等等 。
未来有篇作品他既是 头条,又是畅销,依然图像和文字,
type中以 1,3,4 的格式存储。
那大家什么用sql查找全体type中有4图像和文字规范的稿子吧??
那将要咱们的 find_in_set 出马的时候到了。

上海时时乐走势图官网 7

FIND_IN_SET(str,strlist)


原本以为MySQL能够张开那样的查询:

那将在大家的 find_in_set 出马的时候到了。以下为援用的剧情:

看不懂概念也清闲,按上面类子:

总计:like是广阔的模糊相称,字符串中并未有分隔符,Find_IN_SET 是准确相配,字段值以德文”,”分隔,Find_IN_SET查询的结果要小于like查询的结果。

十分重要的区分正是like是相近的混淆查询;而 find_in_set()是可靠相配,並且字段值之间用‘,'分开,Find_IN_SET查询的结果要小于like查询的结果。

再来看看这些:

(二)

只顾:mysql字符串函数find_in_set(str1,str2)函数是再次来到str2中str1所在的地方索引,str2必需以","分割开。

id 是八个表的字段,然后每条记下分别是id等于1,2,3,4,5的时候
稍稍类似in (集结)

上述所述是笔者给大家介绍的mysql中find_in_set()函数的行使详解,希望对我们全数助于,借使大家有另外疑问请给自己留言,作者会及时过来大家的。在此也特别多谢我们对剧本之家网址的支撑!

-> 2 因为b 在strlist集合中放在2的职位 从1发端

select * from treenodes where FIND_IN_SET(id, '1,2,3,4,5'); 

最主要的分歧正是like是广大的混淆查询,而 find_in_set() 是纯粹相称,况兼字段值之间用‘,'分开。

本来感觉mysql能够开展如此的查询:

这两条到底有啥分别吧?为何第一条不可能收获不错的结果,而第二条却能获得结果。原因实在是(一)中 (list) list是变量, 而(二)中 ('libk', 'zyfon', 'daodao')是常量。

有个小说表里面有个type字段,它存款和储蓄的是文章类型,有 1头条、2推荐、3火爆、4图像和文字等等 。

再来看看那些:

你恐怕感兴趣的小说:

  • mysql通过find_in_set()函数达成where in()顺序排序
  • Mysql中FIND_IN_SET()和IN差别简析
  • Mysql中的find_in_set的采纳方法介绍
  • MySQL的FIND_IN_SET函数使用方法分享

如果字符串str在由N个子链组成的字符串列表strlist 中,则再次来到值的限制在 1 到 N 之间。 多个字符串列表就是三个由局地被 ‘,' 符号分开的子链组成的字符串。假设第三个参数是二个常数字符串,而第叁个是type SET列,则FIND_IN_SET() 函数被优化,使用比特总括。 借使str不在strlist 或strlist 为空字符串,则重临值为 0 。如自由三个参数为NULL,则再次来到值为 NULL。那几个函数在率先个参数包括三个逗号(‘,')时将无法正常运转。

注意:

CREATE TABLE `test` (
`id` int(8) NOT NULL auto_increment,
`name` varchar(255) NOT NULL,
`list` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
)

INSERT INTO `test` VALUES (1, 'name', 'daodao,www.jb51.net,xiaoqin');
INSERT INTO `test` VALUES (2, 'name2', 'xiaohu,daodao,xiaoqin');
INSERT INTO `test` VALUES (3, 'name3', 'xiaoqin,daodao,www.jb51.net');

假定字符串str在由N个子链组成的字符串列表strlist 中,则再次来到值的限量在 1 到 N 之间。 一个字符串列表正是五个由局地被 ‘,' 符号分开的子链组成的字符串。假若第三个参数是三个常数字符串,而第4个是type SET列,则FIND_IN_SET() 函数被优化,使用比特总结。 借使str不在strlist 或strlist 为空字符串,则再次回到值为 0 。如自由三个参数为NULL,则重临值为 NULL。这几个函数在首先个参数包罗一个逗号(‘,')时将无法符合规律运作。

SELECT FIND_IN_SET('b', 'a,b,c,d');
select * from treenodes where id in (1,2,3,4,5);

因而只要要让(一)能精确工作,须求用

首先举个例证来讲:

FIND_IN_SET(str,strlist)

SELECT * FROM users WHERE FIND_IN_SET(2,limits);

例子1:

始建表并插入语句:

MySQL手册中find_in_set函数的语法:

find_in_set()和in的区别:

mysql 中find_in_set()和in()用法相比较

str 要询问的字符串

使用find_in_set函数一遍回到多条记下

SELECT id,name,list from tb_test WHERE FIND_IN_SET('daodao',list); -- (一)的改进版

结果:

SELECT id,name,list from tb_test WHERE 'daodao' IN ('libk', 'zyfon', 'daodao'); -- (二)

注意:

那样是足以的。

SELECT id,name,list from tb_test WHERE 'daodao' IN(list); -- (一)

在mysql中,有时大家在做数据库查询时,需求获得某字段中包罗某些值的笔录,可是它亦不是用like能消除的,使用like大概查到大家不想要的记录,它比like越来越精准,那时候mysql的FIND_IN_SET函数就派上用场了,下边来看三个例证。

以下为援引的内容:

现在有篇小说他既是头条,又是走俏,依旧图像和文字,type中以 1,3,4 的格式存款和储蓄。那大家什么样用sql查找全部type中有4的图像和文字类型的篇章吧??

select id, list, name from table where 'daodao' IN (list);

询问字段(strlist)中富含(str)的结果,重回结果为null或记录

 例子:

上海时时乐走势图官网 8 

这两条到底有啥界别吧?为啥第一条不可能博得不错的结果,而第二条却能赢得结果。原因实在是(一)中 (list) list是变量, 而(二)中 ('libk', 'zyfon', 'daodao')是常量。

因为b 在strlist会集中放在2的岗位 从1方始

总结

CREATE TABLE `tb_test` (
 `id` int(8) NOT NULL auto_increment,
 `name` varchar(255) NOT NULL,
 `list` varchar(255) NOT NULL,
 PRIMARY KEY (`id`)
);
INSERT INTO `tb_test` VALUES (1, 'name', 'daodao,xiaohu,xiaoqin');
INSERT INTO `tb_test` VALUES (2, 'name2', 'xiaohu,daodao,xiaoqin');
INSERT INTO `tb_test` VALUES (3, 'name3', 'xiaoqin,daodao,xiaohu');

FIND_IN_SET(str,strlist)

前天想查询全数剧中人物编号为2的顾客,用like关键字查询:

实际上那样是丰硕的,这样唯有当list字段的值等于'daodao'时(和IN前面包车型地铁字符串完全相称),查询才使得,否则都得不到结果,固然'daodao'真的在list中。

总结:

就此借使list是常量,则足以向来用IN, 不然要用find_in_set()函数。

MySQL手册中find_in_set函数的语法解释:

CREATE TABLE `tb_test` (
 `id` int(8) NOT NULL auto_increment,
 `name` varchar(255) NOT NULL,
 `list` varchar(255) NOT NULL,
 PRIMARY KEY (`id`)
);
INSERT INTO `tb_test` VALUES (1, 'name', 'daodao,xiaohu,xiaoqin');
INSERT INTO `tb_test` VALUES (2, 'name2', 'xiaohu,daodao,xiaoqin');
INSERT INTO `tb_test` VALUES (3, 'name3', 'xiaoqin,daodao,xiaohu');
SELECT * from C_PURCHASINGMASTERDATA where FIND_IN_SET(EKGRP,'C54,C02,C14,C60,C06,C61,C53,C51,C12,C08,C03,C07')
SELECT * from C_PURCHASINGMASTERDATA where EKGRP in ('C54','C02','C14','C60','C06','C61','C53','C51','C12','C08','C03','C07')

如此第二条数据不持有权限'2'的顾客也查出来了,不合乎预期。上面采取mysql 函数find_in_set()来解决。

弄个测量检验表来注脚双方的分别

CREATE TABLE users(
  id int(6) NOT NULL AUTO_INCREMENT,
  name VARCHAR(20) NOT NULL,
  limits VARCHAR(50) NOT NULL, -- 权限
  PRIMARY KEY (id)
);
INSERT INTO users(name, limits) VALUES('小张','1,2,12'); 
INSERT INTO users(name, limits) VALUES('小王','11,22,32');
select FIND_IN_SET('2', '1,2'); 返回2
select FIND_IN_SET('6', '1'); 返回0
SELECT id,name,list from tb_test WHERE 'daodao' IN(list); -- (一)

str 要查询的字符串

select * from article where FIND_IN_SET('4',type)

再来看看那个:

SELECT * FROM users WHERE limits LIKE '%2%';

select FIND_IN_SET('1', '1');归来 就是1 那时候的strlist集结有一些非常唯有三个字符串 其实便是要求前三个字符串 必供给在后一个字符串集合中才重临大于0的数

上海时时乐走势图官网 9

find_in_set():

SELECT id,name,list from tb_test WHERE FIND_IN_SET('daodao',list); -- (一)的改进版

上海时时乐走势图官网 10

find_in_set()和in的区别:


strlist 字段名 参数以”,”分隔 如 (1,2,6,8,10,22)

MySQL手册中find_in_set函数的语法:

如此是足以的。

这两条到底有怎么样界别吗?为何第一条不可能获得正确的结果,而第二条却能得到结果。

案由实在是(一)中 (list) list是变量, 而(二)中 ('libk', 'zyfon', 'daodao')是常量。

从而只要要让(一)能科学工作,需求用find_in_set():

select id, list, name from table where find_in_set('daodao',list);

(一)的革新版。

总结:

进而一旦list是常量,则足以一向用IN, 不然要用find_in_set()函数。

上述所述是作者给大家介绍的mysql中find_in_set()函数的采取详解,希望对大家有所协助,若是我们有另外疑问请给笔者留言,小编会及时回复我们的。在此也特别感激大家对台本之家网址的支撑!

总结:

实际那样是充足的,那样独有当name是list中的第一个因素时,查询才有效,不然都得不到结果,即使'daodao'真的在list中。

strlist 字段名 参数以”,”分隔 如 (1,2,6,8)

这般是足以的。


结果:2

弄个测量试验表来申明二者的界别

select * from treenodes where FIND_IN_SET(id, '1,2,3,4,5');

find_in_set()和like的区别:

SELECT userid,username,userrole 角色 FROM `user` WHERE userrole LIKE '%2%';

上海时时乐走势图官网 11

find_in_set 函数使用方法

因此假使要让(一)能准确专业,要求用find_in_set():

(一)

要是字符串str 在由N 子链组成的字符串列表strlist 中,则再次来到值的范围在 1 到 N 之间。
三个字符串列表就是三个由一些被 ‘,' 符号分开的子链组成的字符串。若是第4个参数是一个常数字符串,而第1个是type SET列,则 FIND_IN_SET() 函数被优化,使用比特总结。

上海时时乐走势图官网 12 

find_in_set()和like的区别:

您也许感兴趣的小说:

  • mysql中find_in_set()函数的施用详解
  • mysql通过find_in_set()函数完成where in()顺序排序
  • Mysql中FIND_IN_SET()和IN差异简析
select FIND_IN_SET('2', '1,2'); 返回2
select FIND_IN_SET('6', '1'); 返回0 strlist中不存在str,所以返回0。

用 find_in_set() 查询:

上海时时乐走势图官网 13 

一经str不在strlist 或strlist 为空字符串,则再次来到值为 0 。如随意多少个参数为NULL,则重回值为 NULL。那些函数在首先个参数包含一个逗号(‘,')时将没办法平时运作。

原来以为mysql能够扩充如此的询问:

在mysql中in可以总结内定的数字,而find_in_set()用于特定的数据类型。

select * from article where FIND_IN_SET('4',type)

上海时时乐走势图官网 14 

显然用 find_in_set()查询得到的结果才是我们想要的结果。所以他们的

上海时时乐走势图官网 15 

事实上那样是老大的, 那样独有当list字段的值等于'daodao'时(和IN前边的字符串完全同盟),查询才使得,不然都得不到结果,即便'daodao'真的在list中。

SELECT id,name,list from tb_test WHERE 'daodao' IN ('libk', 'zyfon', 'daodao'); -- (二)

因而一旦list是常量,则足以向来用IN, 否则要用find_in_set()函数。

select * from treenodes where id in (1,2,3,4,5);
mysql> SELECT FIND_IN_SET('b', 'a,b,c,d');

不过如果第二句sql里面包车型大巴值是流传sql的一个变量字段,那么第二句sql就不佳使了。要以实际景况调控用in依然用 find_in_set()函数 。

本文由上海时时乐走势图发布于上海时时乐走势图官网,转载请注明出处:mysql中find_in_set()函数的利用及in()用法详解上海时

您可能还会对下面的文章感兴趣: