Sql 数组包含空字符串的Postgres
我试图从demojson->'sub'->'item'=array(“”)的演示中执行Sql 数组包含空字符串的Postgres,sql,arrays,json,postgresql,Sql,Arrays,Json,Postgresql,我试图从demojson->'sub'->'item'=array(“”)的演示中执行select*,但这不起作用。我想找到以下信息 JSON列中.sub.item是一个数组的所有行,其中正好包含一个空字符串([“”]) JSON列中.sub.item所在的所有行都是一个数组,该数组可能包含多个项,但至少有一个项是空字符串。([“不为空”、“也不为空”、“不为空”]) 例如,demojson列可以包含 { "key": "value", "sub": { "item": [
select*,但这不起作用。我想找到以下信息
- JSON列中
.sub.item
是一个数组的所有行,其中正好包含一个空字符串([“”]
)
- JSON列中
.sub.item
所在的所有行都是一个数组,该数组可能包含多个项,但至少有一个项是空字符串。([“不为空”、“也不为空”、“不为空”]
)
例如,demojson列可以包含
{
"key": "value",
"sub": {
"item": [""]
}
}
你试过了吗
SELECT * from demo
WHERE demojson->'sub'->>'item' = '[""]';
这里->
操作符允许以文本形式获取JSON对象字段
还有另一个解决方案
SELECT * from demo
WHERE json_array_length(demojson->'sub'->'item') = 1 AND
demojson->'sub'->'item'->>0 = '';
这里->
运算符允许获取JSON第一个数组元素作为文本。您尝试过吗
SELECT * from demo
WHERE demojson->'sub'->>'item' = '[""]';
这里->
操作符允许以文本形式获取JSON对象字段
还有另一个解决方案
SELECT * from demo
WHERE json_array_length(demojson->'sub'->'item') = 1 AND
demojson->'sub'->'item'->>0 = '';
这里->
操作符允许获取JSON第一个数组元素作为文本。由于JSONLint没有验证提供的文本示例,我使用了下一个:
CREATE TABLE info (id int, j JSON);
insert into info values
(1, '{"key":"k1", "sub": {"item":["i1","i2"]}}'),
(2, '{"key":"k2", "sub": {"item":[""]}}'),
(3, '{"key":"k3", "sub": {"item":["i2","i3"]}}');
以这种方式使用where子句,它可以:
select * from info
where j->'sub'->>'item' = '[""]';
+----+------------------------------------+
| id | j |
+----+------------------------------------+
| 2 | {"key":"k2", "sub": {"item":[""]}} |
+----+------------------------------------+
可以在此处查看:由于JSONLint无法验证提供的文本示例,我使用了下一个:
CREATE TABLE info (id int, j JSON);
insert into info values
(1, '{"key":"k1", "sub": {"item":["i1","i2"]}}'),
(2, '{"key":"k2", "sub": {"item":[""]}}'),
(3, '{"key":"k3", "sub": {"item":["i2","i3"]}}');
以这种方式使用where子句,它可以:
select * from info
where j->'sub'->>'item' = '[""]';
+----+------------------------------------+
| id | j |
+----+------------------------------------+
| 2 | {"key":"k2", "sub": {"item":[""]}} |
+----+------------------------------------+
可以在此处查看:尝试以下操作:
SELECT * FROM demo
WHERE demojson->'sub'->'item' = to_jsonb(ARRAY['']);
请尝试以下操作:
SELECT * FROM demo
WHERE demojson->'sub'->'item' = to_jsonb(ARRAY['']);
请显示JSON文件或最小示例。添加了一个示例。我无法验证此文本是否为有效的JSON文件。请显示JSON文件或最小示例。添加了一个示例。我无法验证此文本是否为有效的JSON文件。由于您在模式中没有使用任何通配符,您可能只需要='[''”
和='
,而不是像“[''”
和像“”
@IMSoP谢谢您的建议,这很有意义。因为您在模式中没有使用任何通配符,您可能只需要='['']“
和=”
而不是像“[”“]”那样的和谢谢你的建议,这很有意义。