PostgreSQL JSON类型&查询

时间:2015-01-07 10:43:27

标签: json postgresql

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

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}');

我想知道如何查询此表以获取带有"值"的所有记录。属性优于18

在目前的情况下,id为1的记录将是唯一的结果。

平等正在发挥作用(但它是一个字符串比较):

SELECT *  from data WHERE attributes->>'value' = '10';

如何处理数字?

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"

感谢。

1 个答案:

答案 0 :(得分:4)

::强制转换运算符优先于评估优先级中的任何其他运算符(.除外),因此您要添加括号:

SELECT *  from data WHERE (attributes->>'value')::integer > 18;

符合标准的替代方案:

 SELECT *  from data WHERE cast(attributes->>'value' AS integer) > 18;