作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个表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
键,它可能会发生冲突,所以如果这不是问题我也不会感到惊讶。
引用资料:
最佳答案
您应该提取对 (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
是一个lateral join,函数jsonb_each()
对product的每一行执行一次。
关于json - 如何在 PostgreSQL (9.4+) 中选择不区分大小写的 JSONB 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38336135/
我是一名优秀的程序员,十分优秀!