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;
使用 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;