You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 8.0中使用JSON_EXTRACT识别空值并替换的正确方法

解决MySQL 8.0中识别JSON字段空值并替换的问题

你遇到的问题核心在于JSON中的null和SQL的NULL在MySQL里是不同的类型:当你用JSON_OBJECT('documentNumber', null)插入数据时,JSON字段里存储的是JSON类型的null,而JSON_EXTRACT提取这个值时返回的是JSON null,并非SQL NULL——ISNULL()函数只能识别SQL NULL,所以你的判断条件没生效。

这里有两种常用的正确实现方式:

方式1:用JSON_TYPE判断JSON null类型

JSON_TYPE()函数会返回JSON值的具体类型,当提取到JSON null时,它会返回字符串'NULL',我们可以用这个来做判断:

SELECT 
  CASE 
    WHEN JSON_TYPE(JSON_EXTRACT(`change`, '$.documentNumber')) = 'NULL' THEN '1'
    ELSE JSON_EXTRACT(`change`, '$.documentNumber') 
  END AS result 
FROM `Log`;

方式2:用->>运算符将JSON值转为SQL值

->>是JSON_UNQUOTE(JSON_EXTRACT(...))的简写,它会把JSON值转换为对应的SQL类型,此时JSON null会被转为SQL NULL,这样ISNULL()就能正常识别了:

SELECT 
  CASE 
    WHEN ISNULL(`change`->>'$.documentNumber') THEN '1'
    ELSE `change`->>'$.documentNumber' 
  END AS result 
FROM `Log`;

两种方式都能得到你期望的结果:2和1。如果需要结果是数值类型而非字符串,把'1'改成1即可。

内容的提问来源于stack exchange,提问作者Bisoux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.09 21:07:59