WHERE BETWEEN 子句中的 PostgreSQL jsonb 值

2024-05-08

我的数据库表(a_table)中有 jsonb 字段,其中包含 int 值,例如:

{
  "abc":{
       "def":{
            "ghk":500
        }
   }
}

我将使用 WHERE 子句创建带有此字段(“ghk”)过滤器的 SELECT:

SELECT * FROM a_table WHERE ghk BETWEEN 0 AND 1000;

我应该如何创建这样的查询?到目前为止找不到 jsonb 使用的好教程。

提前致谢!

EDIT我找到了这个解决方案:

SELECT * FROM a_table WHERE a_field #> '{abc,def,ghk}' BETWEEN '0' AND '10000' ;

这是对的吗?


The #>返回一个 JSON 文档,您无法将其转换为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 http://www.postgresql.org/docs/current/static/functions-json.html

Using BETWEEN '0' AND '10000'这不是一个好主意,因为这进行的是字符串比较而不是数字比较。价值'2'不在两者之间'0' and '10000'。这就是为什么您需要将返回值转换为数字以获得正确的比较。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WHERE BETWEEN 子句中的 PostgreSQL jsonb 值 的相关文章

随机推荐