mysql 中 find_in_set()

白杨树 418次浏览

摘要: 在mysql中,有时我们在做数据库查询时,需要得到某字段中包含某个值的记录,但是它也不是用like能解决的,使用like可能查到我们不想要的记录,它比like更精准,这时候mysql的FIND_IN_SET函数就派上用场了,下面来具体了解一下。

      在mysql中,有时我们在做数据库查询时,需要得到某字段中包含某个值的记录,但是它也不是用like能解决的,使用like可能查到我们不想要的记录,它比like更精准,这时候mysql的FIND_IN_SET函数就派上用场了,下面来具体了解一下。

    FIND_IN_SET(str,strlist)函数

        str 要查询的字符串

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

        查询字段(strlist)中包含(str)的结果,返回结果为null或记录

        下面举例说明

  下面我想查询area中包含”1″这个参数的记录

SELECT * from test where FIND_IN_SET('1',area)

mysql手册中find_in_set函数的语法:

FIND_IN_SET(str,strlist) 1
假如字符串str 在由N 子链组成的字符串列表strlist 中,则返回值的范围在 1 到 N 之间。一个字符串列表就是一个由一些被‘,'符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则 FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。12
mysql> SELECT FIND_IN_SET('b','a,b,c,d');
-> 2 mysql> SELECT *  from video  where find_in_set('4',week); 1234

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

注意  find_in_set 是全表扫描的