📅  最后修改于: 2023-12-03 15:32:25.475000             🧑  作者: Mango
JSONB是PostgreSQL中的一种数据类型,它可以存储任意的JSON对象以及数组。JSONB类型的数据可以进行高效的索引和查询,使得它成为了处理JSON数据的一种理想方式。而JSONB中使用的操作符' -> '和' ->> '则提供了对JSONB类型的数据的快速、灵活、方便的操作方法。
' -> '操作符用于从JSONB对象中提取一个属性的值,例如:
SELECT '{"a":1, "b":"two"}'::jsonb -> 'a'; => 1
' ->> '操作符用于从JSONB对象中提取一个属性的文本值,例如:
SELECT '{"a":1, "b":"two"}'::jsonb ->> 'b'; => 'two'
' -> '操作符
' -> '操作符返回一个JSONB对象中指定属性键的值,可以是一个简单值(数字、字符串、布尔值、null),也可以是一个内嵌的JSONB对象或数组。
SELECT '{"a":1, "b":{"c":3}}'::jsonb -> 'b'; => {"c":3}
如果指定的属性键不存在,则返回null。
SELECT '{"a":1}'::jsonb -> 'b'; => null
' ->> '操作符
' ->> '操作符返回一个JSONB对象中指定属性键的文本值,如果属性键指定的值不是一个文本,则将其转换为文本。如果指定的属性键不存在,则返回null。
SELECT '{"a":1, "b":"two"}'::jsonb ->> 'b'; => 'two'
' ->> '操作符
' ->> '操作符与'->>'操作符的作用类似,但是它返回的不是一个标量文本值,而是一个文本值数组(JSONB的'->>'操作符是PostgreSQL专有的扩展操作符,不是标准SQL的一部分)。
SELECT '{"a":1, "b":"two"}'::jsonb ->> '{a,b}'::text[]; => ['1','two']
' ->>> '操作符
' ->>> '操作符是' ->> '操作符的替代版本,它不会将属性键转换为文本。如果属性键不是一个文本键值,则抛出一个错误。
SELECT '{"a":1, "b":"two"}'::jsonb ->>> b; => 'two'
SELECT '{"a":1, "b":{"c":3}}'::jsonb ->>> b; => ERROR: key "b" not found in JSON document
通过' -> '和' ->> '操作符的组合使用,可以轻松地提取JSONB对象中的任何属性值和文本。而且,' ->> '和' ->>> '操作符的存在扩展了操作符的功能,更加灵活地适应了不同的JSONB对象操作需求。