我的数据库表(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(使用前将#替换为@)