首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PostgreSQL JSON类型及查询

PostgreSQL JSON类型及查询
EN

Stack Overflow用户
提问于 2015-01-07 10:43:26
回答 1查看 948关注 0票数 3

使用JSON9.4,是否可以在带有比较运算符的PostgreSQL数据类型中找到数值(例如。给我所有的记录,JSON列中的age属性优于18)?

代码语言:javascript
复制
CREATE TABLE data
(
   id serial NOT NULL,
   attributes jsonb
);

INSERT INTO data (id, attributes) VALUES (1, '{"name": "Value A", "value": 20}');
INSERT INTO data (id, attributes) VALUES (2, '{"name": "Value B", "value": 10}');

我想知道如何查询这个表,以获得"value“属性优于18的所有记录。

在本例中,唯一的结果是使用id 1进行记录。

等式是有效的(但它是一个字符串比较):

代码语言:javascript
复制
SELECT *  from data WHERE attributes->>'value' = '10';

如何处理数字?

代码语言:javascript
复制
SELECT *  from data WHERE attributes->>'value' > 18;
 ==> ERROR: operator does not exist: text > integer

SELECT *  from data WHERE attributes->>'value'::integer > 18;
 ==> ERROR: invalid input syntax for integer: "value"

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-07 11:48:59

在计算优先级方面,::强制转换运算符几乎先于任何其他运算符(.除外),因此您需要添加括号:

代码语言:javascript
复制
SELECT *  from data WHERE (attributes->>'value')::integer > 18;

符合标准的备选办法:

代码语言:javascript
复制
 SELECT *  from data WHERE cast(attributes->>'value' AS integer) > 18;
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27817613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档