J'utilise PostgreSQL 9.6, et j'ai une table nommée "ItemDbModel" avec deux colonnes qui ressemble à ceci:
No integer,
Content jsonb
Disons que j'ai mis beaucoup de disques comme:
"No": 2, {"obj":"x","Item": {"Name": "BigDog", "Model": "NamedHusky", "Spec":"red dog"}}
"No": 4, {"obj":"x","Item": {"Name": "MidDog", "Model": "NamedPeppy", "Spec":"no hair"}}
"No": 5, {"obj":"x","Item": {"Name": "BigCat", "Model": "Tomcat", "Spec":"blue color"}}
Comment puis-je interroger la table pour:
Et commander par "Content.Item.Name.length"?
Je vous remercie!
Vous devez vous familiariser avec Fonctions et opérateurs JSON .
-- #1
select *
from example
where content->'Item'->>'Name' ilike '%dog%'
and content->'Item'->>'Spec' ilike '%red%'
-- #2
select *
from example
where content->'Item'->>'Name' ilike '%dog%'
or content->'Item'->>'Spec' ilike '%red%'
-- #3
select distinct on(no) t.*
from example t,
lateral jsonb_each_text(content->'Item')
where value ilike '%dog%';
-- and
select *
from example t
order by length(content->'Item'->>'Name');