PostgreSQL JSON 类型和查询

PostgreSQL JSON type & queries

使用 PostgreSQL 9.4,是否可以使用比较运算符在 JSON 数据类型中查找数值(例如,给我所有 JSON 列中年龄属性优于 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}');

我想知道如何查询此 table 以获取具有 "value" 属性优于 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"

谢谢。

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

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

符合标准的备选方案:

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