WHERE BETWEEN 子句中的 PostgreSQL jsonb 值

PostgreSQL jsonb value in WHERE BETWEEN clause

我的数据库中有 jsonb 字段 table (a_table),里面有 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' ;

正确吗?

#> returns 无法转换为 int 的 JSONB 文档。您需要 #>> 运算符,它 returns 一个可以转换为整数的标量值:

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