KESV9新兼容MySQL的JSON操作符

1. 特性
在Mysql中,JSON操作符允许用户对JSON数据类型的列中执行各种操作:操作符‘->’用于从JSON对象中提取一个特定的键的值。例如,json_column -> ‘$.key’将返回JSON对象中为‘key’的值;操作符‘->>’与操作符’->’类似,但返回的是提取值的字符串表示,例如,json_column ->> ‘$.key’将返回键为‘key’的值作为字符串。
在KingbaseES最新版本中,我们兼容了MySQL中的‘->’操作符以及‘->>’操作符,通过使用这些操作符,用户可以方便地在JSON数据类型的列中执行各种操作。
2. 新兼容JSON操作符
2.1 ‘->’操作符
2.1.1   操作符语法
操作符语法
左操作数类型
右操作数类型
返回类型
索引
json-> path
json类型
jsonpath类型
json类型
不支持

2.1.2    功能描述
‘->’操作符其实是函数JSON_EXTRACT只有两个参数时的别名,其功能是返回json文档中指定path对应的值。JSON_EXTRACT(json_doc,path[,path]…)函数可以有多个path,而‘->’操作符只能指定一个path。且不支持索引:

Mysql> create index t_idx_a on t ((a->'$.a'));
ERROR 3753 (42000): Cannot create a functional index on a function that returns a JSON or GEOMETRY value.


    2.1.3   功能举例
 

Mysql > select * from jsontest;
+------------------------+
|           json                 |
+------------------------+
| {“a”:”b”}               |
|     [1, 2, ,3]                |
+------------------------+
Mysql > select json -> ‘$.a’ from jsontest;
+------------------------+
| json -> ‘$.a’             |
--------------------------
| “b”                             |
| NULL                        |
+------------------------+
Mysql > select json -> ‘$.a’ from jsontest;
+------------------------+
| json -> ‘$[0]’           |
--------------------------
| {“a”:”b”}                  |
| 1                                 |
+------------------------+



2.2 ‘->>’操作符


2.2.1   操作符语法

操作符语法
左操作数类型
右操作数类型
返回类型
索引
json->> path
json类型
jsonpath类型
字符串
不支持

2.2.2
    功能描述





 

‘->>’操作符是‘->’操作符的扩展,以字符串形式返回指定json文档中指定path对应的值,并取消引用。等同于将‘->’操作符所得结果以字符串形式返回。也可用JSON_UNQUOTE( JSON_EXTRACT(json, path) )函数表示。且不支持索引:

Mysql> create index t_idx_a on t ((a->>'$.a'));
ERROR 3757 (HY000): Cannot create a functional index on an expression that returns a BLOB or TEXT. Please consider using CAST.

下面3中形式将返回相同的值:
l JSON_UNQUOTE( JSON_EXTRACT(json, path) )
l JSON_UNQUOTE(json -> path)
l json->>path
2.2.3   功能举例
Mysql > select * from jsontest;
+------------------------+
|     json                  |
+------------------------+
| {“a”:”b”}               |
|  [1, 2, ,3]                 |
+------------------------+
Mysql > select json ->> ‘$.a’ from jsontest;
+------------------------+
| json -> ‘$.a’             |
---------------------------
| b                                 |
| NULL                        |
+------------------------+
Mysql > select json ->> ‘$.a’ from jsontest;
+-------------------------+
| json -> ‘$[0]’            |
---------------------------
| {“a”:”b”}                   |
| 1                                  |
+-------------------------+



3. 金仓数据库KingbaseES实现方式

 

在金仓数据库中,上述两种操作符在插件mysql_json中实现,用户在使用时需要在mysql模式下create插件:
test=# show database_mode;
database_mode
---------------
mysql
(1 row)
 
test=# create extension mysql_json ;
CREATE EXTENSION

之后用户可以如同MySQL一样,对JSON列使用操作符进行操作。
  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值