2

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

这是对的吗?

4

1 回答 1

4

#>返回一个 JSONB 文档,您不能将其转换为int. 您需要#>> 返回可以转换为整数的标量值的运算符:

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

于 2015-04-30T10:19:45.463 回答