MySQL 中 -> 和 ->> 操作符的区别

简介

  • MySQL 5.7 或更高版本,可以使用 ->>-> 运算符简化语法
  • 这两个操作符都是用于提取 JSON 数据的,但有一些重要区别

-> 操作符

  • 功能:提取 JSON 对象的指定路径的值

  • 返回类型:返回 JSON 类型的值(可能带有引号)

  • 等效于JSON_EXTRACT(json_doc, path)

  • 示例

    SELECT additional_info->'$.source' FROM calendar;
    

    如果 additional_info{"source": "google"},返回的是 JSON 格式的 "google"(带引号)

->> 操作符

  • 功能:提取 JSON 对象的指定路径的值并取消引用

  • 返回类型:返回字符串类型的值(去掉引号)

  • 等效于JSON_UNQUOTE(JSON_EXTRACT(json_doc, path))

  • 示例

    SELECT additional_info->>'$.source' FROM calendar;
    

    同样的数据会返回字符串 google(不带引号)

关键区别对比

特性->->>
返回值类型JSON 类型(可能带引号)字符串类型(无引号)
等效函数JSON_EXTRACT()JSON_UNQUOTE(JSON_EXTRACT())
使用场景需要保留JSON格式时需要普通字符串时
NULL处理路径不存在返回NULL路径不存在返回NULL

实际应用示例

-- 假设 additional_info = '{"source": "google", "score": 5}'

SELECT 
  additional_info->'$.source' AS with_quotes,    -- 返回 ""google"" (JSON字符串)
  additional_info->>'$.source' AS without_quotes, -- 返回 "google" (普通字符串)
  additional_info->'$.score' AS score_json,      -- 返回 5 (JSON数字)
  additional_info->>'$.score' AS score_string    -- 返回 "5" (字符串)
FROM calendar;

何时使用哪个

  • 使用 ->> 当:
    • 你需要直接比较或作为字符串使用
    • 你需要去除JSON字符串的引号
    • 你需要将结果与其他字符串连接
  • 使用 -> 当:
    • 你需要保持JSON格式进行进一步JSON操作
    • 你需要确保返回的是有效的JSON值
    • 你要将结果传递给其他JSON函数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值