CREATE TABLE `schools` (
`id` bigint NOT NULL AUTO_INCREMENT,
`stages` json DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin ROW_FORMAT=DYNAMIC;
插入测试数据
INSERT INTO `schools` ( `stages` ) VALUES ( '[2]' );
查询表中字段 stages 中包含数值 2 的所有记录
使用 JSON_EXTRACT 函数,可以从 JSON 中提取出指定位置的值。但是它只能提取某个特定位置的值,不能查询是否包含某个值。所以如果需要查询 JSON 数组是否包含某个值,还需补充使用 LIKE。
SELECT
*
FROM
`schools` AS `SchoolModel`
WHERE
JSON_EXTRACT( stages, '$[0]' ) LIKE '%2%'
MySQL 5.7 版本引入了 JSON_CONTAINS 函数,用于判断一个 JSON 数组是否包含某个元素。
SELECT
*
FROM
`schools` AS `SchoolModel`
WHERE
JSON_CONTAINS(
stages,
'2',
'$'
)
JSON_CONTAINS 函数同样可以用于搜索嵌套在一个对象或数组中的元素。
SELECT
*
FROM
`schools`
WHERE
JSON_CONTAINS( `stages`, '{"name":"小学"}', "$" );
参考资料
- https://deepinout.com/mysql/mysql-questions/568_mysql_select_where_json_array_contains.html