【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, ',', ',|' ), ',' );
这样子,就实现了我们想要的效果
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步