Postgresql
Postgres 不區分大小寫搜尋 Jsonb 列標記鍵
我需要以不區分大小寫的方式獲取與給定標籤鍵和值匹配的行。
**這裡:**鍵搜尋應該不區分大小寫,值可以是字元串或字元串數組。
現在,我正在使用以下查詢:
數據庫: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"' );