WHERE BETWEEN子句中的PostgreSQL jsonb值

时间:2015-04-30 10:12:18

标签: json postgresql postgresql-9.4 jsonb

我的数据库表(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' ;

是否正确?

1 个答案:

答案 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'之间。这就是为什么你需要将返回的值转换为数字以获得正确的比较。