2016-06-21 70 views
2

我有一个表,如:PostgreSQL的jsonb不区分大小写查询

CREATE TABLE cityData 
(
    item character varying, 
    data jsonb 
); 

它包含了像

ITEM  DATA 
test1  [{"rank":"1", "city":"New York"},{"rank":"3", "city":"Sidney"}] 
test2  [{"rank":"2", "city":"NEW YORK"},{"rank":"4", "city":"New Delhi"}] 

我需要不同的JSON对象的数量,其中城市为 '纽约' I值我正在使用以下查询

SELECT * FROM cityData t 
WHERE (data @> '[{"city":"New York"}]') 
and t.item ilike '%test%'; 

但是,此查询输出test1行。我需要查询不区分大小写,这样data @> '[{"city":"New York"}]'比赛都New YorkNEW YORK

回答

4
where lower(data::text)::jsonb @> lower('[{"city":"New York"}]')::jsonb 
+1

会是有效的投到文本,然后再转换为jsonb? – ranjan

+0

@ranjan不要对结构化数据使用json。 –

+0

不要对结构化数据使用json吗?你是什​​么意思? – dwanderson