2016-09-27 319 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

相關問題