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