Как выбрать ключи JSONB без учета регистра в PostgreSQL (9.4+)
Setup (PostgreSQL 9.4+)
Предположим у меня есть таблица product
:
create table product
(
attributes jsonb
);
данные:
insert into product (attributes)
values ('{"Color": "Red"}'),
('{"color": "White"}'),
('{"COLOR": "Blue"}');
вопрос
Как выбрать все записи'color
атрибут в PostgreSQL 9.4+? Поскольку ключи отличаются по корпусу, я не могу использовать этот синтаксис:
select
attributes->>'color' as color
from product;
мой ожидаемый результат будет:
Red
White
Blue
Возможное Решение
Я также попытался использовать этот синтаксис (работает, но чувствует "Сокс"):
select
coalesce(
attributes->>'color',
attributes->>'Color',
attributes->>'COLOR') as color
from product;
возможно ли это? Я вижу, что это может противоречить, если вы color
и Color
ключи на том же объекте, поэтому я не удивлюсь, если это не вещь.
ссылки:
1 ответов
вы должны извлечь пары (ключ, значение), чтобы использовать функцию lower()
select value as color
from product, jsonb_each(attributes)
where lower(key) = 'color';