我使用MySQL 5.7+和原生JSON数据类型。样本数据:
Sub Changecolortest5()
'
' Changecolortest5 Macro
'
'
If ActiveWindow.View.SplitSpecial <> wdPaneNone Then
ActiveWindow.Panes(2).Close
End If
If ActiveWindow.ActivePane.View.Type = wdNormalView Or ActiveWindow. _
ActivePane.View.Type = wdOutlineView Then
ActiveWindow.ActivePane.View.Type = wdPrintView
End If
Do
ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader
Selection.MoveDown Unit:=wdParagraph, Count:=1, Extend:=wdExtend
Selection.Font.Color = 8527984
ActiveWindow.ActivePane.View.NextHeaderFooter
Loop
'Exit Header and Footer
ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument
End Sub
问题:如何在[
{
"code": 2,
"stores": [
{
"code": 100,
"quantity": 2
},
{
"code": 200,
"quantity": 3
}
]
},
{
"code": 4,
"stores": [
{
"code": 300,
"quantity": 4
},
{
"code": 400,
"quantity": 5
}
]
}
]
中提取数组?
以下(工作)查询具有我想要提取的数据的位置以及硬编码的搜索条件:
code = 4
我尝试使用通配符(SELECT JSON_EXTRACT(data_column, '$[0]')
FROM json_data_table
WHERE data_column->'$[1].code' = 4
),但我没有收到任何结果。
答案 0 :(得分:4)
SELECT row FROM
(
SELECT data_column->"[*]" as row
FROM json_data_table
WHERE 4 IN JSON_EXTRACT(data_column, '$[*].code')
)
WHERE row->".code" = 4
...如果这不是顶层的未编制索引的对象数组,那么这将更容易使用。您可能需要考虑对架构进行一些调整。
注意:
如果您的数据中有多行,则指定"$[i]"
将选择该行,而不是它的汇总。使用您的数据集,"$[1].code"
将始终评估该单行中code
的值。
基本上,你说的是:
$
json collection [1]
集合中的第二个对象。.code
属性标记为&#34;代码&#34;。...因为该查询只会有一个匹配,所以它总是eval到4 ...
WHERE 4 = 4
由于&#34;代码&#34;的全部目的作为关键,把它作为关键。
[
"code2":{
"stores": [
{
"code": 100,
"quantity": 2
},
{
"code": 200,
"quantity": 3
}
]
},
"code4": {
"stores": [
{
"code": 300,
"quantity": 4
},
{
"code": 400,
"quantity": 5
}
]
}
]
然后,它需要的只是:
SELECT datacolumn->"[code4]" as code4
FROM json_data_table
答案 1 :(得分:-1)
这就是您要寻找的。
SELECT data_column->'$[*]' FROM json_data_table where data_column->'$[*].code' like '%4%'
。
从数组中进行选择时,所选数据周围将有[]
,因此data_column->'$[*].code' = 4
是不可能的。