sql中对json数据字段的查询?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql中对json数据字段的查询?相关的知识,希望对你有一定的参考价值。

数据库里有一个typeid2字段,在写入时是一个数组转换成["3","1","5"]这样的json格式存储在数据库。现在需要通过这个typeid2字段来查询包含某个ID的数据,应该怎么写这个查询语句?

参考技术A 用正则匹配,把这个字段看成字符串类型的。类似这种写法:
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值的数据框

PostgreSQL Json字段作为查询条件案例

PostgreSQL9.4往jsonb字段新增键值SQL怎么写

需要 SQL 查询帮助以解析 BigQuery 表中的 JSON 数据

SQL-mysql操作json

通过 PHP 将 Sql 数据库转换为具有正确格式的 JSON,并在 PHP 脚本本身中对值进行排序