sql中对json数据字段的查询?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql中对json数据字段的查询?相关的知识,希望对你有一定的参考价值。
数据库里有一个typeid2字段,在写入时是一个数组转换成["3","1","5"]这样的json格式存储在数据库。现在需要通过这个typeid2字段来查询包含某个ID的数据,应该怎么写这个查询语句?
SELECT DISTINCT tag, body FROM pages
WHERE (body REGEXP BINARY '"listeListeOuiNon":".*1.*"') AND NOT (body REGEXP BINARY '"listeListeOuiNon":"2"') 参考技术B 可以用like进行模糊查询, 原理就是查找typeid2中包含"ID", 例如"1", 引号需要带上, 在like语句后面拼接字符串, 即like %"ID"%
select * from table t
where t.typeid2 like '%"' || ID ||'"%' 参考技术C 先取出string,再在内存里转换为对象并检查。
ps:存json是没问题,但又想存json又想直接查,违反了数据库的范式。
sql语句中对json数据的操作
sql语句中对json数据的操作
1.获取指定json字符串中指定的属性值,以下三种写法等价: //attributes_json字段的值为一个json字符串,下面的语句都是获取attributes_json中的DP属性的值
json_extract(attributes_json,‘$.DP‘) //json_extract()方法获取json中指定的值,格式:json_extract(json_field,‘$.DP‘)
attributes_json->‘$.DP‘
attributes_json->>‘$.DP‘ //可以有两个尖括号
2.去掉查询结果中首尾的双引号:
json_unquote()
如:
1)select * from t1 where attributes_json->‘$.P2PUser‘=1 AND attributes_json->‘$.PONUser‘=12 //表中attributes_json值为一个json字符串
上面的条件中,attributes_json->‘$.P2PUser‘=1 含义为attributes_json 字段中P2PUser属性的值等于1
2)select json_unquote(json_extract(attributes_json,‘$.DP‘)) as column_value from t_demand_point where instance_id=2146
以上是关于sql中对json数据字段的查询?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Spark SQL中查询StringType的1个字段具有json值的数据框
PostgreSQL9.4往jsonb字段新增键值SQL怎么写