当前位置:   article > 正文

Mysql 查询以逗号(,)分割的字符串,精确查找和模糊查询_mysql切割字符串后查询

mysql切割字符串后查询

测试示例

1、测试数据库表结构
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test`  (
  `id` bigint(20) NOT NULL COMMENT '主键id',
  `ancestors` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '组织层级',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
2、测试数据
INSERT INTO `test` VALUES (1, '0,1,2,3');
INSERT INTO `test` VALUES (2, '0,2,4,5,6');
INSERT INTO `test` VALUES (3, '11,33,6,22');
INSERT INTO `test` VALUES (4, '0,1,2,3,4,5,6,7,8,9,11');
INSERT INTO `test` VALUES (5, '2,3,4,5,6,7');
INSERT INTO `test` VALUES (6, '1,22,66,16,36');
INSERT INTO `test` VALUES (7, '46,12,32,18');
INSERT INTO `test` VALUES (8, '77,76,75,74');

SET FOREIGN_KEY_CHECKS = 1;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

需求描述

数据库有一个字段ancestors存储着部门父级id,每,用逗号分隔符隔开。比如:ancestors:“0,1,2,3,4,5,6,7,8,11,12,9,10,13"”,我需要查询ancestors字段中包含“2”的信息

-- 表中数据示例
select * from `test` 
  • 1
  • 2

结果:
在这里插入图片描述

使用 LIKE 模糊查询

select * from `test` where ancestors like '%8';
  • 1

结果:

在这里插入图片描述

使用 FIND_IN_SET 函数 【推荐】

使用 FIND_IN_SET 函数能够准确查出 ancestors字段中含有 2 这项有哪些

select id,ancestors from `test` where find_in_set('2',ancestors) GROUP BY id;
  • 1

结果:
在这里插入图片描述

使用 mysql 的正则表达式

我们在SQL中用WHERE子句搜索匹配的条件时,常用到LIKE关键字,今天来简单介绍另一种更加强大的关键字: REGEXP, 正则匹配

select id,ancestors from `test` where ancestors REGEXP '.*2';
  • 1

结果:
在这里插入图片描述

使用 mysql 的LOCATE 函数

这个函数,会把你查询出含有查找 “ 2 ” 的数据

select id,ancestors from `test` where LOCATE ('2',ancestors);
  • 1

结果:
在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/268478
推荐阅读
相关标签
  

闽ICP备14008679号