暂无图片
暂无图片
4
暂无图片
暂无图片
暂无图片

GaussDB 实操——SQL 语法进阶2

JSON 函数

JSON 创建函数

  • JSON_ARRAY(): 创建 JSON 数组
SELECT JSON_ARRAY(1, "abc", NULL, TRUE, CURDATE());
JSON_ARRAY(1, ‘abc’, NULL, true, CURDATE())
1 [1, “abc”, null, true, “2023-07-29”]

gaussdb0061.png

  • JSON_OBJECT(): 创建 JSON 对象
SELECT JSON_OBJECT('id', 87, 'name', 'GaussDB');
JSON_OBJECT(‘id’, 87, ‘name’, ‘GaussDB’)
1 {“id”: 87, “name”: “GaussDB”}

gaussdb0062.png

JSON 搜索函数

  • JSON_CONTAINS(target, candidate[, path]): 判断是否包含特定的 JSON 文档,返回值为
    0 或 1。
SET @j = '{"a": 1, "b": 2, "c": {"d": 4}}'; SET @j2 = '{"d": 4}'; SELECT JSON_CONTAINS(@j, @j2, '$.a');
JSON_CONTAINS(@j, @j2, ‘$.a’)
1 0

gaussdb0063.png

SELECT JSON_CONTAINS(@j, @j2, '$.c')
JSON_CONTAINS(@j, @j2, ‘$.c’)
1 1

gaussdb0064.png

  • JSON_CONTAINS_PATH(json_doc, one_or_all, path[, path] …): 判断给定 path/paths 中是否包含 JSON 文档,返回值为 0 或 1。
SET @j = '{"a": 1, "b": 2, "c": {"d": 4}}'; SELECT JSON_CONTAINS_PATH(@j, 'one', '$.c.d');
JSON_CONTAINS_PATH(@j, ‘one’, ‘$.c.d’)
1 1

gaussdb0065.png

SELECT JSON_CONTAINS_PATH(@j, 'one', '$.a.d');
JSON_CONTAINS_PATH(@j, ‘one’, ‘$.a.d’)
1 0

gaussdb0066.png

  • JSON_EXTRACT(json_doc, path[, path] …): 从 JSON 文档中返回特定路径的内容。
SELECT JSON_EXTRACT('[10, 20, [30, 40]]', '$[2][*]');
JSON_EXTRACT(’[10, 20, [30, 40]]’, ‘$[2][*]’)
1 [30, 40]

gaussdb0067.png

  • JSON_KEYS(json_doc[, path]): 返回 JSON 对象的 KEY 值,返回一个数组。
SELECT JSON_KEYS('{"a": 1, "b": {"c": 30}}');
JSON_KEYS(’{“a”: 1, “b”: {“c”: 30}}’)
1 [“a”, “b”]

gaussdb0068.png

JSON 修改函数

  • JSON_ARRAY_APPEND(json_doc, path, val[, path, val] …): 将值追加到 JSON 文档中指定数组的末尾并返回结果。
SET @j = '{"a": 1, "b": [2, 3], "c": 4}'; SELECT JSON_ARRAY_APPEND(@j, '$.b', 'x');
JSON_ARRAY_APPEND(@j, ‘$.b’, ‘x’)
1 {“a”: 1, “b”: [2, 3, “x”], “c”: 4}

gaussdb0069.png

SELECT JSON_ARRAY_APPEND(@j, '$.c', 'y')
JSON_ARRAY_APPEND(@j, ‘$.c’, ‘y’)
1 {“a”: 1, “b”: [2, 3], “c”: [4, “y”]}

gaussdb0070.png

SET @j = '{"a": 1}'; SELECT JSON_ARRAY_APPEND(@j, '$', 'z');
JSON_ARRAY_APPEND(@j, ‘$’, ‘z’)
1 [{“a”: 1}, “z”]

gaussdb0071.png

  • JSON_ARRAY_INSERT(json_doc, path, val[, path, val] …): 更新 JSON 文档,向文档中插入数组并返回修改后的文档。
SET @j = '["a", {"b": [1, 2]}, [3, 4]]'; SELECT JSON_ARRAY_INSERT(@j, '$[1].b[0]', 'x');
JSON_ARRAY_INSERT(@j, ‘$[1].b[0]’, ‘x’)
1 [“a”, {“b”: [“x”, 1, 2]}, [3, 4]]

gaussdb0072.png

SELECT JSON_ARRAY_INSERT(@j, '$[0]', 'x', '$[2][1]', 'y');
JSON_ARRAY_INSERT(@j, ‘[0],x,[0]', 'x', '[2][1]’, ‘y’)
1 [“x”, “a”, {“b”: [1, 2]}, [3, 4]]

gaussdb0073.png

  • JSON_INSERT(json_doc, path, val[, path, val] …): 向 JSON 文档中插入数据并返回结果。如果路径下已包含值,则不进行插入操作,即不会覆盖已经存在的值。
SET @j = '{ "a": 1, "b": [2, 3]}'; SELECT JSON_INSERT(@j, '$.a', 10, '$.c', '[true, false]');
JSON_INSERT(@j, ‘.a,10,.a', 10, '.c’, ‘[true, false]’)
1 {“a”: 1, “b”: [2, 3], “c”: “[true, false]”}

gaussdb0074.png

SELECT JSON_INSERT(@j, '$.a', 10, '$.c', CAST('[true, false]' AS JSON));
JSON_INSERT(@j, ‘.a,10,.a', 10, '.c’, CAST(’[true, false]’ AS JSON))
1 {“a”: 1, “b”: [2, 3], “c”: [true, false]}

gaussdb0075.png

  • JSON_SET(json_doc, path, val[, path, val] …): 向 JSON 文档中插入或更新数据并返回结果。
  • 说明:
    • JSON_SET():替换已存在的值,添加不存在的值。
    • JSON_INSERT():若已存在值则忽略,若不存在则插入新值。
    • JSON_REPLACE():只替换已存在的值。
SET @j = '{ "a": 1, "b": [2, 3]}'; SELECT JSON_SET(@j, '$.a', 10, '$.c', '[true, false]');
JSON_SET(@j, ‘.a,10,.a', 10, '.c’, ‘[true, false]’)
1 {“a”: 10, “b”: [2, 3], “c”: “[true, false]”}

gaussdb0076.png

SELECT JSON_INSERT(@j, '$.a', 10, '$.c', '[true, false]');
JSON_INSERT(@j, ‘.a,10,.a', 10, '.c’, ‘[true, false]’)
1 {“a”: 1, “b”: [2, 3], “c”: “[true, false]”}

gaussdb0077.png

SELECT JSON_REPLACE(@j, '$.a', 10, '$.c', '[true, false]');
JSON_REPLACE(@j, ‘.a,10,.a', 10, '.c’, ‘[true, false]’)
1 {“a”: 10, “b”: [2, 3]}

gaussdb0078.png

JSON 属性函数

  • JSON_DEPTH(json_doc): 返回 JSON 文档最大深度。
SELECT JSON_DEPTH('[10, {"a": 20}]');
JSON_DEPTH(’[10, {“a”: 20}]’)
1 3

gaussdb0079.png

  • JSON_LENGTH(json_doc[, path]): 返回 JSON 文档的长度,若指定了路径,则返回指定路
    径元素长度。
SELECT JSON_LENGTH('[1, 2, {"a": 3}]');
JSON_LENGTH(’[1, 2, {“a”: 3}]’)
1 3

gaussdb0080.png

SELECT JSON_LENGTH('{"a": 1, "b": {"c": 30}}', '$.b');
JSON_LENGTH(’{“a”: 1, “b”: {“c”: 30}}’, ‘$.b’)
1 1

gaussdb0081.png

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论