使用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"
感谢。
答案 0 :(得分:4)
::
强制转换运算符优先于评估优先级中的任何其他运算符(.
除外),因此您要添加括号:
SELECT * from data WHERE (attributes->>'value')::integer > 18;
符合标准的替代方案:
SELECT * from data WHERE cast(attributes->>'value' AS integer) > 18;