假设我有一张表product
:
create table product
(
attributes jsonb
);
有数据:
insert into product (attributes)
values ('{"Color": "Red"}'),
('{"color": "White"}'),
('{"COLOR": "Blue"}');
如何在PostgreSQL 9.4+中选择所有记录'color
属性?由于键的外壳不同,我无法使用这种语法:
select
attributes->>'color' as color
from product;
我的预期输出是:
Red
White
Blue
我也尝试过使用这种语法(有效,但感觉很烦):
select
coalesce(
attributes->>'color',
attributes->>'Color',
attributes->>'COLOR') as color
from product;
这可能吗?如果你在同一个对象上有color
和Color
个键,我可以看到它可能会发生冲突,所以如果不是这样的话我也不会感到惊讶。
参考文献:
答案 0 :(得分:10)
您应该提取对(key, value)
以使用函数lower()
select value as color
from product, jsonb_each(attributes)
where lower(key) = 'color';
或使用更详细的语法:
select value as color
from product
cross join jsonb_each(attributes)
where lower(key) = 'color';
此cross join
是横向联接,函数jsonb_each()
对product.