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

MySQL中使用SET命令对JSON字段内值排序的可行性咨询

问题解答

单纯只用SET命令没办法直接完成JSON数组的排序需求,得结合MySQL的JSON函数来实现。下面是具体的实现方式:

一、将排序结果赋值给变量

如果你是要把排序后的数组存到变量里,可以用SET配合JSON_TABLE和JSON_ARRAYAGG函数:

1. 字符串排序(处理eligible_vehicle_type)

SET @vehicles = (
    SELECT JSON_ARRAYAGG(value ORDER BY value ASC)
    FROM inventory,
         JSON_TABLE(eligible_vehicle_type, '$[*]' COLUMNS(value VARCHAR(10) PATH '$')) AS jt
    WHERE id = 1
);

这段代码先通过JSON_TABLE把JSON数组拆成单行数据,按字符串顺序排序后,再用JSON_ARRAYAGG重新拼成有序数组,最后用SET赋值给@vehicles变量。

2. 按整数值排序(处理weight_class)

因为weight_class里的数值是以字符串形式存储的,需要先转成整数再排序:

SET @weight_class = (
    SELECT JSON_ARRAYAGG(value ORDER BY CAST(value AS UNSIGNED) ASC)
    FROM inventory,
         JSON_TABLE(weight_class, '$[*]' COLUMNS(value VARCHAR(10) PATH '$')) AS jt
    WHERE id = 1
);

二、直接更新表中数据

如果要把排序后的结果直接写回inventory表,可以用UPDATE语句结合上述函数,本质也是用SET子句来更新列值:

UPDATE inventory
SET eligible_vehicle_type = (
    SELECT JSON_ARRAYAGG(value ORDER BY value ASC)
    FROM JSON_TABLE(eligible_vehicle_type, '$[*]' COLUMNS(value VARCHAR(10) PATH '$')) AS jt
),
weight_class = (
    SELECT JSON_ARRAYAGG(value ORDER BY CAST(value AS UNSIGNED) ASC)
    FROM JSON_TABLE(weight_class, '$[*]' COLUMNS(value VARCHAR(10) PATH '$')) AS jt
)
WHERE id = 1;

简单来说,SET本身只是负责赋值操作,对JSON数组的排序逻辑得靠MySQL的JSON处理函数来完成,两者结合才能实现你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 14:02:43