相关文章推荐
低调的红豆  ·  ant design ...·  4 月前    · 
痴情的数据线  ·  shell 读取json数组-掘金·  1 年前    · 
严肃的黄瓜  ·  Spring Boot 返回 XML ...·  1 年前    · 
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 & LIKE

使用 JSON_EXTRACT 函数,可以从 JSON 中提取出指定位置的值。但是它只能提取某个特定位置的值,不能查询是否包含某个值。所以如果需要查询 JSON 数组是否包含某个值,还需补充使用 LIKE。

-- 使用JSON_EXTRACT函数将数组的第一个元素提取出来, 然后使用LIKE声明匹配是否包含字符串"2"
-- 注意, 这种方式只能用于已知数组中元素位置的情况, 它无法用于查找一个值是否在任何位置上都存在
SELECT
	`schools` AS `SchoolModel` 
WHERE
	JSON_EXTRACT( stages, '$[0]' ) LIKE '%2%'
  • JSON_CONTAINS

MySQL 5.7 版本引入了 JSON_CONTAINS 函数,用于判断一个 JSON 数组是否包含某个元素。

-- 第一个参数是查询的JSON对象, 第二个参数是需要查找的JSON对象(在这里是包含一个字符串"2"的JSON数组), 第三个参数是$(表示查询应该从整个JSON对象开始)
-- 注意, 如果想搜索一个不是独立字符串的值, 例如数字或布尔值, 需要将值转换成JSON格
-- 例如, 如果想搜索数字2, 在JSON格式中, 需要写成'2'而不是原始数字2
SELECT
	`schools` AS `SchoolModel` 
WHERE
	JSON_CONTAINS(
		stages,
		'2', -- '[2]'

JSON_CONTAINS 函数同样可以用于搜索嵌套在一个对象或数组中的元素。

-- 这个查询将返回空结果, 因为JSON数组中没有{"name":"小学"}
SELECT
	`schools` 
WHERE
	JSON_CONTAINS( `stages`, '{"name":"小学"}', "$" );
  • https://deepinout.com/mysql/mysql-questions/568_mysql_select_where_json_array_contains.html
假设您正在使用 GORM v2 和 MySQL 数据库,并且您的数据表中有一个名为 data 的 JSON 类型的列,其中存储了一个字符串数组,您想要查询数组是否包含某个元素。在 MySQL 中,并没有内置的数组数据类型。但是,MySQL 提供了一些可以实现类似数组功能的机制,如使用字符串来存储由逗号分隔的,使用 JSON 类型来存储数组数据等。JSON_CONTAINS 函数还可以判断 JSON 对象中某个字段的是否为指定的,具体用法可参见 MySQL 官网的介绍。 我整理的一些关于【MySQL,SQL】的项目学习资料(附讲解~~)和大家一起分享、学习一下:https://edu.51cto.com/surl=QDW3g3MySQL中如何判断JSON数据是否包含某个 随着现代应用的数据交互需求不断增长,JSON(JavaScript Object Notation)作为一种轻量级的... 一、单个json的,获取使用json_extract `select json_extract('{"name":"Zhaim","tel":"13240133388"}',"$.tel`"); 二、数组json的,获取数组的长度使用JSON_LENGTH SELECT id,JSON_LENGTH('[{"id":"10000004555096","name":"1.docx"},{"id":"10000004555098","name":"2.doc"},{"id":"1000000455509 3、根据json数组查询,用JSON_CONTAINS(字段,JSON_OBJECT('json属性', "内容"))根据 json数组 查询JSON_CONTAINS(字段,JSON_OBJECT('json属性', "内容"))使用 json_extract 函数查询json_extract(字段,"$.json属性")2、使用json_extract函数查询json_extract(字段,"$.json属性")1、使用 字段->'$.json属性'进行查询条件。 比如 查询 parent_id_list = 436 的 数据 所有数据 select * from building where JSON_CONTAINS(parent_id_list,JSON_Array( 436)) 结果 如下: 查询 parent_id_list = 436 和487 的 数据 所有数据 (*注意这里得是并 不是或`) SELECT * FROM building WHERE JSON_CONTAINS(parent_id_list,JSON_ARRAY( 436. (1):-- JSON_EXTRACT(json数据, 可以为单个key以,分割) 提取json。(2):-- JSON_EXTRACT(json数据, 多个key) 多个key的结果合并为一列。eg:--查询指定字段中是否包含ename和deptno中的任何一个('one')eg:--查询指定字段中是否同时包含ename和deptno('all')eg:-- 查询id为8的员工的名称是否为scott。eg:--获取json字段中所有的key。1代表包含json,0代表不包含。 我们在查询mysql数据时,查询某个字段的数剧是我们经常接触的,直接使用sql语句或者更方便的直接使用数据库的orm语句查询。但是如果需要查询某个json字段里面的某些数据,orm模型可能都无法达到效果,还不如直接使用sql语句进行查询来的直观。下面总结了一些sql语句查询json字段里面的