【发布时间】:2020-06-18 08:30:41
【问题描述】:
我有一张桌子 card_percentage,带有 DDL:
CREATE TABLE card_percentage
(
id int UNSIGNED AUTO_INCREMENT PRIMARY KEY,
jdoc json NULL
);
只有一行数据
id | jdoc
------------
1 | {"AMXC": [{"enabled": "y", "bank_code": "AMXC", "max_amount": 99999999.99, "min_amount": 0.0, "percentage": 2.5}], "VISA": [{"enabled": "y", "bank_code": "VISA", "max_amount": 1999.99, "min_amount": 0.0, "percentage": 2.8}, {"enabled": "y", "bank_code": "VISA", "max_amount": 99999999.99, "min_amount": 2000.0, "percentage": 1.8}]}
美化 JSON 以提高可读性
{
"AMXC": [
{
"enabled": "y",
"bank_code": "AMXC",
"min_amount": 0.0,
"max_amount": 99999999.99,
"percentage": 2.5
}
],
"VISA": [
{
"enabled": "y",
"bank_code": "VISA",
"min_amount": 0.0,
"max_amount": 1999.99,
"percentage": 2.8
},
{
"enabled": "y",
"bank_code": "VISA",
"min_amount": 2000.0,
"max_amount": 99999999.99,
"percentage": 1.8
}
]
}
现在,当 200 的金额介于 min_amount 和 max_amount 之间时,我想为 VISA 选择 percentage。为此,我使用以下查询,但结果集中没有给出任何内容。
SELECT id,
jdoc -> '$.VISA[*].percentage' percentage
FROM card_percentage
WHERE id = 1
AND jdoc -> '$.VISA[*].min_amount' <= 200
AND jdoc -> '$.VISA[*].max_amount' >= 200
;
【问题讨论】:
-
见dbfiddle.uk/… - 它显示您的问题来源。您必须将 JSON 转换为表格(使用 JSON_TABLE() function)。
-
请向我们展示您想要的样本数据结果。
-
@GMB 当然他想得到一个值为
(1, 2.8)... -
@Akina,根据您的输入,我尝试了 JSON_TABLE,它真的很有趣。让我发布一个包含更多详细信息的答案。
-
为什么要“让”?这是最好的选择...