[TOC]

FIND_IN_SET(str,strlist)

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

实例

数据准备

CREATE TABLE `test`(
    `id` MEDIUMINT UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT '主键',
    `title` CHAR(12) NOT NULL DEFAULT '' COMMENT '标题',
    `area` CHAR(10) NOT NULL DEFAULT '' COMMENT '地区',
    `type` CHAR(20) NOT NULL DEFAULT '' COMMENT '类型'
)ENGINE=INNODB CHARSET utf8 COMMENT '测试表';


insert into test  values (null,'测试1','2,3,4','中国,美国'),(null,'测试2','1,3,5','韩国,中国'),(null,'测试3','4,5,6','韩国,美国');
+----+---------+-------+---------------+
| id | title   | area  | type          |
+----+---------+-------+---------------+
|  1 | 测试1 | 2,3,4 | 中国,美国 |
|  2 | 测试2 | 1,3,5 | 韩国,中国 |
|  3 | 测试3 | 4,5,6 | 韩国,美国 |
+----+---------+-------+---------------+

查询属于 3 号地区的数据

SELECT * from test where FIND_IN_SET('3',area);

+----+---------+-------+---------------+
| id | title   | area  | type          |
+----+---------+-------+---------------+
|  1 | 测试1 | 2,3,4 | 中国,美国 |
|  2 | 测试2 | 1,3,5 | 韩国,中国 |
+----+---------+-------+---------------+

查询数据 中国 类型的数据

select * from test where FIND_IN_SET('中国',type);
+----+---------+-------+---------------+
| id | title   | area  | type          |
+----+---------+-------+---------------+
|  1 | 测试1 | 2,3,4 | 中国,美国 |
|  2 | 测试2 | 1,3,5 | 韩国,中国 |
+----+---------+-------+---------------+

FIND_IN_SET和like的区别

  like是广泛的模糊匹配,字符串中没有分隔符,Find_IN_SET 是精确匹配,字段值以英文","分隔,Find_IN_SET 查询的结果要小于like查询的结果。

参考地址


最后编辑: 于 3年前

标签

评论列表(0)

    暂无评论