更新日期:2024年09月11日
| number
"foo"
| string
true
| boolean
null
| null
[1, 2, 3]
| array
{"x":"foo", "y":123} | object
|
(7 rows)
json_build_array( [VARIADIC “any”] )
描述:从一个可变参数列表构造出一个JSON 数组。
返回类型:array-json
示例:
gbase=# select json_build_array('a',1,'b',1.2,'c',true,'d',null,'e',json
'{"x": 3, "y": [1,2,3]}','');
json_build_array
---------------------------------------------------------------------------
["a", 1, "b", 1.2, "c", true, "d", null, "e", {"x": 3, "y": [1,2,3]}, ""]
(1 row)
json_build_object( [VARIADIC “any”] )
描述:从一个可变参数列表构造出一个JSON 对象,其入参必须为偶数个,两两一组组
成键值对。注意键不可为null。
返回类型:object-json
示例:
gbase=# select json_build_object(1,2);
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
286
json_build_object
-------------------
{"1" : 2}
(1 row)
json_to_record(object-json, bool)
描述:正如所有返回record 的函数一样,调用者必须用一个AS 子句显式地定义记录
的结构。会将object-json 的键值对进行拆分重组,把键当做列名,去匹配填充as 显示指定
的记录的结构。
返回类型:record
示例:
gbase=# select * from json_to_record('{"a":1,"b":"foo","c":"bar"}',true) as
x(a int, b text, d text);
a |
b
| d
---+-----+---
1 | foo |
(1 row)
json_to_recordset(array-json, bool)
描述:参考函数json_to_record,对数组内个每个元素,执行上述函数的操作,因此这
要求数组内的每个元素都得是object-json。
返回类型:setof record
示例:
gbase=# select * from json_to_recordset(
gbase(# '[{"a":1,"b":"foo","d":false},{"a":2,"b":"bar","c":true}]',
gbase(# false
gbase(# ) as x(a int, b text, c boolean);
a |
b
| c
---+-----+---
1 | foo |
2 | bar | t
(2 rows)
json_object(text[])、json_object(text[], text[])
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
287
描述:从一个文本数组构造一个object-json。这是个重载函数,当入参为一个文本数组
的时候,其数组长度必须为偶数,成员被当做交替出现的键/值对。两个文本数组的时候,
第一个数组认为是键,第二个认为是值,两个数组长度必须相等。键不可为null。
返回类型:object-json
示例:
gbase=# select json_object('{a,1,b,2,3,NULL,"d e f","a b c"}');
json_object
-------------------------------------------------------
{"a" : "1", "b" : "2", "3" : null, "d e f" : "a b c"}
(1 row)
gbase=# select json_object('{a,b,"a b c"}', '{a,1,1}');
json_object
---------------------------------------
{"a" : "a", "b" : "1", "a b c" : "1"}
(1 row)
json_agg(any)
描述:将值聚集为json 数组。
返回类型:array-json
示例:
gbase=# create table classes (name varchar, score int8);
CREATE TABLE
gbase=# insert into classes values('A',2),('A',3),('D',5),('D',NULL);
INSERT 0 5
gbase=# select * from classes;
name | score
-----+-------
A
|
2
A
|
3
D
|
5
D
|
(4 rows)
gbase=# select name, json_agg(score) score from classes group by name order
by name;
name |
score
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
288
-----+-----------------
A
| [2, 3]
D
| [5, null]
(2 rows)
json_object_agg(any, any)
描述:将值聚集为json 对象。
返回类型:object-json
示例:
gbase=# select * from classes;
name | score
-----+-------
A
|
2
A
|
3
D
|
5
D
|
(4 rows)
gbase=# select json_object_agg(name, score) from classes group by name order
by name;
json_object_agg
-------------------------
{ "A" : 2, "A" : 3 }
{ "D" : 5, "D" : null }
(2 rows)
jsonb_contained(jsonb, jsonb)
描述:同操作符`<@`, 判断$1 中的所有元素是否在$2 的顶层存在。
返回类型:bool
示例:
gbase=# select jsonb_contained('[1,2,3]', '[1,2,3,4]');
jsonb_contained
-----------------
t
(1 row)
jsonb_contains(jsonb, jsonb)
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
289
描述:同操作符`@>`, 判断$1 中的顶层所有元素是否包含在$2 的所有元素。
返回类型:bool
示例:
gbase=# select jsonb_contains('[1,2,3,4]', '[1,2,3]');
jsonb_contains
----------------
t
(1 row)
jsonb_exists(jsonb, text)
描述:同操作符`?`, 字符串$2 是否存在$1 的顶层以key\elem\scalar 的形式存在。
返回类型:bool
示例:
gbase=# select jsonb_exists('["1",2,3]', '1');
jsonb_exists
--------------
t
(1 row)
jsonb_exists_all(jsonb, text[])
描述:同操作符`?&`, 字符串数组$2 里面,是否所有的元素,都在$1 的顶层以
key\elem\scalar 的形式存在。
返回类型:bool
示例:
gbase=# select jsonb_exists_all('["1","2",3]', '{1, 2}');
jsonb_exists_all
------------------
t
(1 row)
jsonb_exists_any(jsonb, text[])
描述:同操作符`?|`, 字符串数组$2 里面,是否存在的元素,在$1 的顶层以
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
290
key\elem\scalar 的形式存在。
返回类型:bool
示例:
gbase=# select jsonb_exists_any('["1","2",3]', '{1, 2, 4}');
jsonb_exists_any
------------------
t
(1 row)
jsonb_cmp(jsonb, jsonb)
描述:比较大小,正数代表大于,负数代表小于,0 表示相等。
返回类型:integer
示例:
gbase=# select jsonb_cmp('["a", "b"]', '{"a":1, "b":2}');
jsonb_cmp
-----------
-1
(1 row)
jsonb_eq(jsonb, jsonb)
描述:同操作符`=`, 比较两个值的大小。
返回类型:bool
示例:
gbase=# select jsonb_eq('["a", "b"]', '{"a":1, "b":2}');
jsonb_eq
----------
f
(1 row)
jsonb_ne(jsonb, jsonb)
描述:同操作符`<>`, 比较两个值的大小。
返回类型:bool
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
291
示例:
gbase=# select jsonb_ne('["a", "b"]', '{"a":1, "b":2}');
jsonb_ne
----------
t
(1 row)
jsonb_gt(jsonb, jsonb)
描述:同操作符`>`, 比较两个值的大小。
返回类型:bool
示例:
gbase=# select jsonb_gt('["a", "b"]', '{"a":1, "b":2}');
jsonb_gt
----------
f
(1 row)
jsonb_ge(jsonb, jsonb)
描述:同操作符`>=`, 比较两个值的大小。
返回类型:bool
示例:
gbase=# select jsonb_ge('["a", "b"]', '{"a":1, "b":2}');
jsonb_ge
----------
f
(1 row)
jsonb_lt(jsonb, jsonb)
描述:同操作符`<`, 比较两个值的大小。
返回类型:bool
示例:
gbase=# select jsonb_lt('["a", "b"]', '{"a":1, "b":2}');
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
292
jsonb_lt
----------
t
(1 row)
jsonb_le(jsonb, jsonb)
描述:同操作符`<=`, 比较两个值的大小。
返回类型:bool
示例:
gbase=# select jsonb_le('["a", "b"]', '{"a":1, "b":2}');
jsonb_le
----------
t
(1 row)
to_json(anyelement)
描述:把参数转换为`json`。
返回类型:json
示例:
gbase=# select to_json('{1,5}'::text[]);
to_json
-----------
["1","5"]
(1 row)
jsonb_hash(jsonb)
描述:对jsonb 进行hash 运算。
返回类型:integer
示例:
gbase=# select jsonb_hash('[1,2,3]');
jsonb_hash
------------
-559968547
GBase 8c SQL 参考手册
南大通用数据技术股份有限公司
293
(1 row)
其他函数
描述:gin 索引以及json\jsonb 聚集函数所用到的内部函数,功能不过多赘述。
gin_compare_jsonb、gin_consistent_jsonb、gin_consistent_jsonb_hash、gin_extract_jsonb、
gin_extract_jsonb_hash
、
gin_extract_jsonb_query
、
gin_extract_jsonb_query_hash
、
gin_triconsistent_jsonb、gin_triconsistent_jsonb_hash、json_agg_transfn、json_agg_finalfn、
json_object_agg_transfn、json_object_agg_finalfn 等。