2016-09-27 322 views
3

我有一个表中有一列用于存储每行的JSON值。目前,这些都不是标准化的。我想结束每个这些JSON值在属性的数量和标题上的标准化。有没有可用于确定每个JSON值是否包含指定属性的查询?SQL查询以确定JSON值是否包含指定的属性

举个例子,这里有什么一些JSON值的样子:

{"name":"Item 1","cost":"4.99"} 
{"name":"Item 2"} 
{"name":"Item 3","cost":""} 
{"name":"Item 4"} 

如何:

  • 确定哪些 “成本” 属性(项目1行(项目2 & 4)
  • 确定哪些行具有“成本”属性设置的值(项目1)

谢谢!这是我第一次问(至少在最近),所以非常感谢任何帮助!

+0

解析寻找“cost”属性的字段的字符串值。 – IAbstract

回答

3

我假设你使用MySQL 5.7,它添加了JSON数据类型。使用JSON_EXTRACT(colname, '$.cost')访问cost属性。这将是NULL是不是这样的财产。

  1. WHERE JSON_EXTRACT(colname, '$.cost') IS NOT NULL
  2. WHERE JSON_EXTRACT(colname, '$.cost') IS NULL
  3. WHERE JSON_EXTRACT(colname, '$.cost') != ''

这也将是NULL如果在JSON值为null;我不认为有办法将此与不存在的价值区分开来。

+0

不好意思,我无法区分不存在的属性和存在的属性,但没有任何价值。尽管如此,这非常接近,对我很有帮助。谢谢! –

+0

你们每个人在你的JSON数据中都有''cost':null'吗? – Barmar

+0

某些行具有“成本”属性,但不是全部。我的目标是尝试快速整理没有它的行,所以我可以添加一个,然后使用JSON修改函数来更新该部分,而不是将JSON字符串作为整体更新。 –

0

MySQL不解析JSON数组。它把它们当作字符串来对待。所以你将不得不使用LIKE

+0

MySQL 5.7内置JSON函数。 – Barmar

+0

查看https://dev.mysql.com/doc/refman/5.7/en/json.html – Barmar

+0

很酷。我还没有把任何东西移到5.7。 – CptMisery

相关问题