我的数据库表(a_table)中有一个jsonb字段,其中int值在,例如:
{
"abc":{
"def":{
"ghk":500
}
}
}
我即将使用WHERE子句通过此字段(“ghk”)创建带过滤器的SELECT:
SELECT * FROM a_table WHERE ghk BETWEEN 0 AND 1000;
我应该如何创建这样的查询?到目前为止找不到jsonb用法的好教程。
提前致谢!
修改
我找到了这个解决方案:
SELECT * FROM a_table WHERE a_field #> '{abc,def,ghk}' BETWEEN '0' AND '10000' ;
是否正确?
答案 0 :(得分:1)
#>
会返回一个您无法转换为int
的JSONB文档。您需要#>>
运算符,它返回一个可以转换为整数的标量值:
select *
from a_table
where (json_col #>> '{abc,def,ghk}')::int between 0 and 1000
手册中记录了所有JSON操作符:http://www.postgresql.org/docs/current/static/functions-json.html
使用BETWEEN '0' AND '10000'
并不是一个好主意,因为这会进行字符串比较而不是数字比较。值'2'
不在'0'
和'10000'
之间。这就是为什么你需要将返回的值转换为数字以获得正确的比较。