我希望能够选择“赞”大于50的行。
{
"id":2,
"name":"TEST",
"locations":[
{
"cityName":"NEW YORK",
"lat":123, "lon":456,
"likes":1000,
"dislikes":5
}
]
}
答案 0 :(得分:0)
这个怎么样?
SELECT * FROM mytable WHERE JSON_EXTRACT_PATH_TEXT( jsoncolumn, 'likes' )::INTEGER > 50;
答案 1 :(得分:0)
假设数据类型json
并且您的数组始终只有一个元素,如下所示:
SELECT *
FROM tbl
WHERE (js_column #>> '{locations,0,likes}')::int > 50;
使用将文本数组作为路径的json / jsonb #>>
operator。数组索引以JSON数组中的 0 开头(而不是从 1 计数的Postgres数组)。
如果数组可以包含多个元素(这首先是数组)并且您希望任何行至少有一个元素记录符合条件事情变得更加复杂:
SELECT *
FROM tbl t
WHERE EXISTS (
SELECT FROM json_array_elements(t.js_column->'locations') elem
WHERE (elem->>'likes')::int > 50
);
相关,有解释: