【mysql】mysql5.7支持的json字段查询【mybatis】

mysql5.7支持的json字段查询html

参考:http://www.javashuo.com/article/p-cructvhu-cw.htmlmysql

参考:http://www.javashuo.com/article/p-ztjtkugx-na.htmlsql

 

使用示例:json

存储结构以下:数组

 

1.以json字段做为查询条件:[json字段所有是JSONObject类型的]

SELECT
    * 
FROM
    worksheet_data_table_data w 
WHERE
    w.val -> '$.input_0' LIKE '%0%'

 

查询结果:spa

 

 

 

2.判断JSON字段,是JSONObject类型仍是JSONArray类型

SELECT
    w.val,
    JSON_TYPE( w.val ) 
FROM
    worksheet_data_table_data w

 

查询结果:code

 

 

3.查询JSON字段是 Array的JSON类型的

SELECT
    w.val,
    JSON_TYPE( w.val ) 
FROM
    worksheet_data_table_data w

where 
JSON_TYPE(w.val) = 'ARRAY'

 

查询结果:htm

 

 

4.以json字段为查询条件[查询JSONArray]类型  [like查询]

SELECT
    * 
FROM
    worksheet_data_table_data w 
WHERE
    w.val -> '$[*].*' LIKE '%峰%'

解释:对象

w.val -> '$[*].*' LIKE '%峰%'

1.w.val字段是JSON数组[无所谓JSONObject仍是JSONArray]
[反正若是按照对象查,那数组是匹配不到的]
[反之,若是按照数组查,对象也是匹配不到的]


2.'$[*].*' 
表明查询JSONArray 数组格式的JSON字符串中,
第一个*  表明任意下标
第二个* 表明任意属性


3.LIKE '%峰%'
匹配条件和正常sql 查询条件同样 写

 查询结果以下:blog

 

5.以json字段为查询条件[查询JSONArray]类型  [=查询]

 

等于查询不一样于like的查询,须要在外面包裹一层JSON_CONTAINS()

 

好比数据集以下:

 

 想要 查询 出 name字段  既等于"亚瑟"  又等于"jj"的json字段

SELECT
    id,
    `dept-user_0`
FROM
    worksheet_data_30  d
WHERE
    JSON_CONTAINS( d.`dept-user_0`->'$[*].name' ,  '"jj"', '$')
    
    AND
    
    JSON_CONTAINS( d.`dept-user_0`->'$[*].name' ,  '"亚瑟"', '$')

 

查询结果以下:

相关文章
相关标签/搜索