mysql如何取出json里某一个字段或计算两数

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 查询:

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_tableyour_json_column 为你的实际表名和包含 JSON 数据的列名。

这个查询使用了 JSON_EXTRACT 函数来提取 JSON 数据中的字段,并使用 CASE 语句来根据条件判断计算结果。FORMAT 函数用于确保结果保留两位小数。

请注意,如果 JSON 数据中的字段值是字符串类型,你可能需要在比较和计算之前将其转换为数字类型。

在 MySQL 5.7 版本之后,可以使用 CASTCONVERT 函数进行转换。

例如:

CAST(JSON_EXTRACT(your_json_column, '$.oldMachineDealPrice') AS DECIMAL(10, 2))

这样可以确保比较和计算是基于数字而不是字符串进行的。

你可能感兴趣的:(mysql,json,android)