假如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 查询:
SELECT
JSON_UNQUOTE(JSON_EXTRACT(your_json_column, '$.reportUrl')) AS reportUrl,
CASE
WHEN JSON_EXTRACT(your_json_column, '$.oldMachineDealPrice') IS NULL
OR JSON_EXTRACT(your_json_column, '$.oldMachineSubsidyPrice') IS NULL
OR (JSON_EXTRACT(your_json_column, '$.oldMachineDealPrice') -
JSON_EXTRACT(your_json_column, '$.oldMachineSubsidyPrice')) < 0
THEN '0.00'
ELSE
FORMAT(
JSON_EXTRACT(your_json_column, '$.oldMachineDealPrice') -
JSON_EXTRACT(your_json_column, '$.oldMachineSubsidyPrice'),
2
)
END AS qualityCheckRecoveryPrice
FROM
your_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))
这样可以确保比较和计算是基于数字而不是字符串进行的。