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

如何在MySQL中查询JSON类型列并排除指定属性?

嘿,针对你这个MySQL JSON列的查询需求,我整理了两种实用的方法,看哪种更符合你的场景:

方法1:保留JSON格式,移除指定键(MySQL 5.7及以上适用)

如果你的需求是得到一个不包含startdate和enddate的JSON对象,直接用JSON_REMOVE函数就可以,非常简洁:

SELECT JSON_REMOVE(months, '$.startdate', '$.enddate') AS filtered_month_data
FROM your_table_name;

拿你的示例数据来说,执行这条查询后会返回:

{"2018Apr": "2500", "2018Jun": "9000", "2018May": "4000"}
方法2:展开为键值对的行(MySQL 8.0及以上适用)

如果需要把每个动态键值对单独作为一行返回(方便后续统计或处理),就用JSON_TABLE来解析JSON对象的键和值,再过滤掉不需要的键:

SELECT 
    jt.key_name, 
    jt.key_value
FROM 
    your_table_name,
    -- 先提取JSON列中的所有键
    JSON_TABLE(
        JSON_KEYS(months),
        '$[*]' COLUMNS(
            key_name VARCHAR(100) PATH '$'
        )
    ) AS keys_list
    -- 根据提取到的键,对应获取每个键的值
JOIN JSON_TABLE(
    months,
    '$' COLUMNS(
        key_value VARCHAR(100) PATH CONCAT('$.', keys_list.key_name)
    )
) AS jt
WHERE 
    keys_list.key_name NOT IN ('startdate', 'enddate');

执行后会得到这样的结构化结果:

key_namekey_value
2018Apr2500
2018Jun9000
2018May4000

小提示

  • 记得把SQL里的your_table_name替换成你实际使用的表名
  • 如果你的动态键长度超过100,可以调整VARCHAR的定义值
  • 方法2依赖JSON_TABLE特性,只有MySQL 8.0及以上版本支持哦

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:17:30