mysql如何取出json里某一个字段或计算两数
假如mysql里有这么一个字段:your_json_column,存储json数据为
{"status":2,"orderNo":"BC20231114035353321101","dealTime":1699960357000,"reportUrl":"https://internalt.sffix.cn","recycleOrderNo":"VCNZJ202311155521","supplementaryPrice":421.99,"oldMachineDealPrice":1372,"oldMachineSubsidyPrice":0
}
问题:现在要取出reportUrl字段和计算质检回收价 = oldMachineDealPrice-oldMachineSubsidyPrice,如果小于0或不存在,则显示0.00,否则保留两位小数,并且提取出reportUrl字段
问题解决
在你的 JSON 数据中,你需要计算质检回收价,并且在计算值小于0或不存在时显示0.00。同时,你也想提取 reportUrl 字段。你可以使用 MySQL 中的 JSON 函数来实现这个目标。
以下是一个示例 SQL 查询:
SELECTJSON_UNQUOTE(JSON_EXTRACT(your_json_column, '$.reportUrl')) AS reportUrl,CASEWHEN JSON_EXTRACT(your_json_column, '$.oldMachineDealPrice') IS NULLOR JSON_EXTRACT(your_json_column, '$.oldMachineSubsidyPrice') IS NULLOR (JSON_EXTRACT(your_json_column, '$.oldMachineDealPrice') -JSON_EXTRACT(your_json_column, '$.oldMachineSubsidyPrice')) < 0THEN '0.00'ELSEFORMAT(JSON_EXTRACT(your_json_column, '$.oldMachineDealPrice') -JSON_EXTRACT(your_json_column, '$.oldMachineSubsidyPrice'),2)END AS qualityCheckRecoveryPrice
FROMyour_table
WHERE-- 如果有其他的条件,可以在这里添加-- 可选:JSON_EXTRACT(your_json_column, '$.oldMachineDealPrice') IS NOT NULL-- 可选:JSON_EXTRACT(your_json_column, '$.oldMachineSubsidyPrice') IS NOT NULL;
请替换 your_table 和 your_json_column 为你的实际表名和包含 JSON 数据的列名。
这个查询使用了 JSON_EXTRACT 函数来提取 JSON 数据中的字段,并使用 CASE 语句来根据条件判断计算结果。FORMAT 函数用于确保结果保留两位小数。
请注意,如果 JSON 数据中的字段值是字符串类型,你可能需要在比较和计算之前将其转换为数字类型。
在 MySQL 5.7 版本之后,可以使用 CAST 或 CONVERT 函数进行转换。
例如:
CAST(JSON_EXTRACT(your_json_column, '$.oldMachineDealPrice') AS DECIMAL(10, 2))
这样可以确保比较和计算是基于数字而不是字符串进行的。