在日常编写SQL中,使用变量来灵活的构建执行的SQL语句是比较常见的。就像在编程中使用变量、函数参数等是一样的道理。这里介绍一种使用MySQL的JSON特性实现在SQL中拼接一个数组的效果。
本文介绍使用JSON函数(JSON_ARRAY、JSON_SEARCH)、以及 FIND_IN_SET 如何简单的实现带有数据组变量的SQL拼接与执行。使用该方法,则无需使用CONCAT函数拼接SQL,再使用PREPARE/EXECUTE语法执行,所以会更加简洁,可读性更强。
具体的,例如需要再查询结果中找到u_name在数组@u_list_j中的记录,那么使用JSON方式可以按照如下模式实现:
SET @u_list_j = JSON_ARRAY('zhou','wu','zheng','wang','zhuge');
SELECT
id,u_name
FROM
t_01
WHERE
JSON_SEARCH(@u_list_j,'one',t_01.u_name);
另一种较为常见的方法是使用 FIND_IN_SET 函数。其使用方法如下:
set @u_list_s = 'zhou,wu,zheng,wang,zhuge';
SELECT
u_name
FROM
t_01
WHERE
FIND_IN_SET(t_01.u_name,@u_list_s);
另外,还可以尝试使用 LOCATE 函数实现,只是使用该函数需要注意,在做字符串匹配的时候容易出现的重复、错误匹配问题。例如,数组中存在"zhuge",那么匹配"zhu",则可能匹配成功,但这并不是期望的结果。
本文中使用的一些示例表如下:
CREATE TABLE t_01(
id int UNSIGNED AUTO_INCREMENT primary key,
u_name varchar(32)
);
INSERT INTO t_01(u_name) values
('wu'),
('zhao'),
('qian'),
('sun'),
('li');