我发现解决方案比这更复杂,但我无法做到这一点......
我有一个名为 json 的数据列。 JSON结构如下:
{"actions": ["action1","action2","action3", ..., "actionN"]}
所以,假设我有3行,包含以下数据:
{"actions": ["work","run"]}
{"actions": ["run","eat","sleep", 'walk']}
{"actions": ["eat","run","work"]}
我想检索操作数组中包含工作的行。
我尝试过类似于此处发布的内容: Query for element of array in JSON column,但由于数组中的每个元素都只是一个json字符串,所以我被困在那里。
然后,我尝试了类似的事情:
SELECT * from table t WHERE 'work' in ...
但这也无法将值作为字符串数组放在那里。
使用PostgreSql 9.3。
答案 0 :(得分:1)
由于您使用的是json
类型,内部只是一个字符串,因此最简单的解决方案是:
SELECT * FROM table WHERE strpos(data::text, 'work') > 0;
它首先违背了使用json
的目的,但在这个简单的情况下它(很可能)比json解析器更快。
json解决方案将是:
SELECT * FROM (
SELECT *, unnest(data->"actions")::text AS action FROM table) AS foo
WHERE action = 'work';