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

文章介绍了如何在数据库中处理name字段包含逗号分隔值的情况,通过使用SQL的CONCAT和REPLACE函数配合正则表达式REGEXP,实现根据前端传入的多个值进行查询。例如,当查询条件为李四,张三时,能正确返回id为1和2的记录。这种方法适用于需要从包含多个值的单一字段中筛选数据的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

现在表字段有个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, ',', ',|' ), ',' );

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值