Postgresql

Postgres 不區分大小寫搜尋 Jsonb 列標記鍵

  • May 27, 2021

我需要以不區分大小寫的方式獲取與給定標籤鍵和值匹配的行。

**這裡:**鍵搜尋應該不區分大小寫,值可以是字元串或字元串數組。

現在,我正在使用以下查詢:

數據庫:Postgres

select * from my_table_name where jsonb_contains(lower(to_jsonb(jsonb_extract_path(tags,'key1'))::TEXT)::jsonb, to_jsonb('"value1"'::jsonb))

但它以區分大小寫的方式搜尋密鑰。

例如:上面的查詢應該返回鍵為 (key1,Key1,KEY1) 且值為 ‘Value1’ 的所有記錄 有人可以幫我嗎?

您需要遍歷所有鍵/值對才能使用它們進行比較lower()

類似的東西:

select mt.*
from my_table_name mt
where exists (select * 
             from jsonb_each_text(mt.tags) as t(tag, value) 
             where lower(t.tag) = 'key1'
               and lower(t.value) = 'value1'); 

這假設您的列tags被定義為jsonb(它應該是)。如果它是json你需要使用的json_each_text()

使用 JSONPATH 查詢語言,您可以查詢

SELECT * FROM my_table_name
WHERE jsonb_path_match(
        tags,
        '$.keyvalue().key like_regex "^key1$" flag "i" && $.keyvalue().value like_regex "^value1$" flag "i"'
     );

引用自:https://dba.stackexchange.com/questions/292327