【mysql系】mysql数据库表字段逗号分割正则匹配多个值

现在表字段有个name字段值为多个分别用逗号隔开,现需要实现如果前端通过页面选择其中几个值,怎么通过sql实现获取查询结果呢?

这里为了测试这种效果,先创建一个测试表

CREATE TABLE `test`  (
  `id` int(11) NOT NULL,
  `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

INSERT INTO `test` VALUES (1, '张三,李四,王五');
INSERT INTO `test` VALUES (2, '李四,王五');
INSERT INTO `test` VALUES (3, '王五');

现在需要实现:

如果查询条件传入李四,张三  那么就需要查询出来id为1和2的记录。

如果查询条件传入王五,就需要全部查询出来。

如果传入张三,那么就需要查询出来记录id为1的记录。

思考了下,这样的条件不就是看字段的值 是否正则匹配传入的字段   不就可以实现这样的效果嘛! 

于是,通过搜索引擎查到了这样的语法

select concat('3333,2222', ',')   regexp concat(replace('33331,55155',',',',|'),',');

于是,我这边根据思路,整理了下完整的sql语句,并贴出了对应查询结果

SELECT
	* 
FROM
	test 
WHERE
	concat( '李四,张三', ',' ) REGEXP concat( REPLACE ( NAME, ',', ',|' ), ',' );

SELECT
	* 
FROM
	test 
WHERE
	concat( '张三', ',' ) REGEXP concat( REPLACE ( NAME, ',', ',|' ), ',' );

SELECT
	* 
FROM
	test 
WHERE
	concat( '王五', ',' ) REGEXP concat( REPLACE ( NAME, ',', ',|' ), ',' );

 这样子,就实现了我们想要的效果

猜你喜欢

转载自blog.csdn.net/run_boy_2022/article/details/130276451
今日推荐