如何在 PostgreSQL 中的 jsonb 列的元素上使用 LOWER()?
How to use LOWER() on elements of a jsonb column in PostgreSQL?
我有一个像这样的 PostgreSQL table:
Table t
id | keys (jsonb)
---+----------------
1 | ["Key1", "Key2"]
我的目标是查询此 table 以查明列表的键之一是否包含在 jsonb 数组列“keys”中。
我设法使用以下方法得到结果:
SELECT *
FROM t
WHERE keys ?| Array ['Key1', 'Key2'];
不过,我找不到通过在 table 中的“键”值上应用 lower() 来扩大此查询的方法。
有没有办法迭代元素以在每个元素上应用 lower()?
您可能需要取消嵌套两个数组:
select *
from t
where exists (
select 1
from jsonb_array_elements_text(t.keys) k1(val)
inner join unnest(array['Key1', 'Key2']) k2(val)
on lower(k1.val) = lower(k2.val)
)
感谢上面的回复,我设法找到了这样的方法:
SELECT *
FROM t, jsonb_array_elements_text(keys) key
WHERE lower(key) in ('key1', 'key2') ;
我有一个像这样的 PostgreSQL table:
Table t
id | keys (jsonb)
---+----------------
1 | ["Key1", "Key2"]
我的目标是查询此 table 以查明列表的键之一是否包含在 jsonb 数组列“keys”中。
我设法使用以下方法得到结果:
SELECT *
FROM t
WHERE keys ?| Array ['Key1', 'Key2'];
不过,我找不到通过在 table 中的“键”值上应用 lower() 来扩大此查询的方法。
有没有办法迭代元素以在每个元素上应用 lower()?
您可能需要取消嵌套两个数组:
select *
from t
where exists (
select 1
from jsonb_array_elements_text(t.keys) k1(val)
inner join unnest(array['Key1', 'Key2']) k2(val)
on lower(k1.val) = lower(k2.val)
)
感谢上面的回复,我设法找到了这样的方法:
SELECT *
FROM t, jsonb_array_elements_text(keys) key
WHERE lower(key) in ('key1', 'key2') ;