Mysql函数FIND_IN_SET()的使用方法

转载 2018年04月17日 14:08:45

Mysql函数FIND_IN_SET()的使用方法

有了FIND_IN_SET这个函数。我们可以设计一个如:一只手机即是智能机,又是Andriod系统的。

比如:有个产品表里有一个type字段,他存储的是产品(手机)类型,有 1、智能机,2、Andriod系统,3、小米系统,4、1000元以下

现在有条手机的记录即是1000元以下的,又是智能机,还是Andriod的系统。

type中以 4,1,2的格式存储.

那们我们如何用sql查找所有type中有4的1000元以下的手机呢,

这就要我们的find_in_set出马的时候到了.

先看MySQL手册中find_in_set函数的语法:

FIND_IN_SET(str,strlist)

假如字符串str 在由N个子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则   FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。

mysql> SELECT FIND_IN_SET('b','a,b,c,d');

+----------------------------+

| FIND_IN_SET('b','a,b,c,d') |

+----------------------------+

|                          2 |

+----------------------------+

1 row in set (0.00 sec)

用起来很简单

就以上面我说到的情况来举例:

以下为实际应用当中的SQL语句:

select * from mobile where FIND_IN_SET('4',type);

这个就可以找出所有1000元以下手机的记录!

 

______________________________________________________________________________________________________________


查询表字段 pingid = (1,2,3,)

 

SELECT * FROM `linkinfo` WHERE `pingid` REGEXP '{id},' AND `pingid` NOT REGEXP '[[:alnum:]]+{id},'   使用上面的语句,可以查询出来

 

用FIND_IN_SET() 更简单

 

SELECT * FROM linkinfo WHERE FIND_IN_SET( '1', pingid )

 

 

 

原来以为mysql可以进行这样的查询
select id, list, name from table where 'daodao' IN (list);      (一)
注:1. table含有三个字段id:int, list:varchar(255), name:varchar(255)

实际上这样是不行的,这样只有当name是list中的第一个元素时,查询才有效,否则都的不到结果,即使'daodao'真的再list中

再来看看这个:
select id, list, name from table where 'daodao' IN ('libk', 'zyfon', 'daodao');    (二)
这样是可以的
---------------------------------------------------------

这两条到底有什么区别呢?为什么第一条不能取得正确的结果,而第二条却能取得结果。

原因其实是(一)中 (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介绍

FIND_IN_SET(str,strlist)函数使用场景及注意事项
  • loongshawn
  • loongshawn
  • 2017-11-23 10:34:02
  • 367

MySql函数 FIND_IN_SET 在Hibernate HQL语句中的使用

FIND_IN_SET(str,strlist) 假如字符串str 在由N 子链组成的字符串列表strlist 中, 则返回值的范围在 1 到 N 之间 。一个字符串列表就是一个由一些被‘,’符...
  • nan403
  • nan403
  • 2016-10-18 18:44:32
  • 1725

Oracle 实现与mysql中find_in_set函数的兼容

CREATE OR REPLACE FUNCTION FIND_IN_SET(piv_str1 varchar2, piv_str2 varchar2, p_sep varchar2 := ','...
  • u011713224
  • u011713224
  • 2014-02-08 16:23:26
  • 3363

mysql中in函数和find_in_set函数的区别详解

前段时间项目中使用到Mysql的FIND_IN_SET函数,感觉挺好用的。过一段时间,老大找到我说,这个需要改为IN,哈哈,只能改了,原因会在下面分析到! CREATE TABLE `test` ( ...
  • jaryle
  • jaryle
  • 2017-11-20 17:12:29
  • 342

Mysql中in和find_in_set的使用说明

在使用in函数的时候,发现查询的数据少了两条,查过资料才找到原因,跟大家分享一下! 原来以为mysql可以进行这样的查询 1】t_bdp_indices_user_info的表结构: ...
  • gengxiaoming7
  • gengxiaoming7
  • 2015-09-09 11:12:31
  • 2629

MySQL 中 FIND_IN_SET 函数执行非常慢的某种写法

MySQL版本:5.7.19 1、需求场景 a) 表说明:商品分类关系表[t_class_product],[classId]  分类主键,fn_class_childs(1) 返回所有子分类...
  • wokelv
  • wokelv
  • 2017-12-27 20:50:04
  • 1250

MySQL函数-- FIND_IN_SET的使用

原文链接:点击打开链接 FIND_IN_SET(str,strlist) 假如字符串str 在由N 子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。 ...
  • u014042146
  • u014042146
  • 2016-05-15 15:45:01
  • 1479

mysql函数group_concat,find_in_set

1, group_concat 是与group by一起使用的。 GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER BY {unsigned_integ...
  • u012669164
  • u012669164
  • 2016-10-12 14:53:47
  • 205

MySql函数 - FIND_IN_SET函数

MySql函数 - FIND_IN_SET函数1.函数简介FIND_IN_SET函数 是一个比like关键字更加高级的精确查询匹配 2.调用形式// 可以用Java中的set集合来理解,在一个set集...
  • qq_15071263
  • qq_15071263
  • 2017-09-12 20:56:02
  • 1443
收藏助手
不良信息举报
您举报文章:Mysql函数FIND_IN_SET()的使用方法
举报原因:
原因补充:

(最多只允许输入30个字)