MySQL 表mytable
有一列json_col
数据以 JSON 格式存储,如下所示:
{
"items": [
{
"name":"foo",
"timestamp":"1612872027"
},
{
"name":"bar",
"timestamp":"1612872027"
}
]
}
我正在尝试获取其元素foo
的时间戳大于某个数字(例如零)的所有行:
select * from mytable
where json_contains(json_extract(json_col, '$.items'), "'foo'", '$[0].name')
and cast(json_extract(json_col, '$.items[0].timestamp') as bigint) > 0
这里有2个问题:
foo
可能不一定是第一个元素,不清楚如何搜索所有元素,而不仅仅是第一个($[*]
不起作用)- 不投入
timestamp
-bigint
如示例中那样不起作用
mysql版本5.7.25
UPD
https://www.db-fiddle.com/f/nyTstzKyvBUzPw1GsWCygD/0
我希望选择前 2 行,因为它们包含一个元素foo
并且它的值timestamp
大于 0。
第三行不会被选择,因为它的foo
值timestamp
不大于 0。
第四个将不会被选中,因为它不包含foo
.