如何在 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') ;