我有一张桌子:
CREATE TABLE cityData
(
item character varying,
data jsonb
);
Run Code Online (Sandbox Code Playgroud)
它包含像
ITEM DATA
test1 [{"rank":"1", "city":"New York"},{"rank":"3", "city":"Sidney"}]
test2 [{"rank":"2", "city":"NEW YORK"},{"rank":"4", "city":"New Delhi"}]
Run Code Online (Sandbox Code Playgroud)
我需要获取多个不同的json对象,其中city是'New York'我正在使用以下查询
SELECT * FROM cityData t
WHERE ( data @> '[{"city":"New York"}]')
and t.item ilike '%test%';
Run Code Online (Sandbox Code Playgroud)
但是这个查询输出test1行.我需要使查询不区分大小写,以便data @> '[{"city":"New York"}]'匹配New York和NEW YORK
where lower(data::text)::jsonb @> lower('[{"city":"New York"}]')::jsonb
Run Code Online (Sandbox Code Playgroud)
@?在 PostgreSQL 12+ 中,可以使用运算符和jsonpath查询来完成不区分大小写的匹配。按照相关示例,您的子句可能看起来类似于:
where data @? '$[*].city like_regex "(?i)^NEW YORK$"'
Run Code Online (Sandbox Code Playgroud)
与将 JSONB 转换为字符串然后返回使用lower().
| 归档时间: |
|
| 查看次数: |
3177 次 |
| 最近记录: |