我有一个 json 类型的 MySQL 列。在那里,存储了一个像 JSON 对象这样的字典。现在,我想从这个 JSON 对象中提取值并创建一个 JSON 数组。
我怎样才能做到这一点?
with json_objs(json_col) as (
select CAST('{"key1": "value1", "key2": "value2"}' AS JSON)
UNION ALL
select CAST('{"key3": "value3", "key4": "value4"}' AS JSON)
)
select SOME_EXPR_I_CAN_T_FIGURE_OUT from json_objs
Run Code Online (Sandbox Code Playgroud)
+----------------------+
| resulting_column |
+----------------------+
| ["value1", "value2"] |
| ["value3", "value4"] |
+----------------------+
Run Code Online (Sandbox Code Playgroud)
CREATE TABLE `json_objs` (
`json_col` json DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Run Code Online (Sandbox Code Playgroud) 名为“likelihood”的列是一个 JSON 对象(键值)。我有另一个表(我们称之为xyz),其中包含CustomerId和key(整数值)列。我根据customerid连接上面的两个表,例如:
Select xyz.customerid, key, label from xyz join abc on xyz.customerid = abc.customerid
问题:我想从表中列的 JSON 对象中查找label表列中提供的键。我发现的所有函数示例都传递硬编码密钥,而不是从数据库获取的密钥的某些动态值。keyxyzlikelihoodabcJSON_EXTRACT
我知道问题可能存在口是心非的可能性,但我没有找到任何东西可以帮助我解决我的情况。
我的 mysql 列中有这个 json:
[
{
"ddi": "55",
"routing_id": "7",
"price": {
"mt": 0.0285,
"mo": 0.0285
}
},
{
"ddi": "598",
"routing_id": "10",
"price": {
"mt": 0.06,
"mo": 0.06
}
}
]
Run Code Online (Sandbox Code Playgroud)
当我执行以下查询时:
[
{
"ddi": "55",
"routing_id": "7",
"price": {
"mt": 0.0285,
"mo": 0.0285
}
},
{
"ddi": "598",
"routing_id": "10",
"price": {
"mt": 0.06,
"mo": 0.06
}
}
]
Run Code Online (Sandbox Code Playgroud)
我得到结果:
["55", "598"]
Run Code Online (Sandbox Code Playgroud)
我的问题是:有一种方法可以在行上返回此数据而不是 json 数组吗?喜欢:
Ddi
55
598
Run Code Online (Sandbox Code Playgroud) 我需要使用 JSON 数据在 MYSQL 表中搜索数据。使用JSON_EXTRACT(@json, "$.link") LIKE '%http%'效果符合预期。但LIKE 'http%' or '%http'不!
这是否意味着 JSON_EXTRACT 不能与单通配符选择匹配一起使用?
例子:
这是我的 JSON
set @json = '{"link": "https://www.google.com"}' ;
Run Code Online (Sandbox Code Playgroud)
select JSON_EXTRACT(@json, "$.link") like '%com';
-- returns 0
select JSON_EXTRACT(@json, "$.link") like 'http%' ;
-- returns 0
select JSON_EXTRACT(@json, "$.link") like '%google%' ;
select JSON_EXTRACT(@json, "$.link") like '%http%' ;
select JSON_EXTRACT(@json, "$.link") like '%com%' ;
-- returns 1 !
Run Code Online (Sandbox Code Playgroud)
这是小提琴中的一个示例:https ://www.db-fiddle.com/f/7yPvfa2UZsZLdYSxdsnecx/0
这些是我的表的列和值:
ID | RULE
123 | {"buy":{"10000":{"q":1}},"total":{"t":"DOLLAR_OFF","v":4.05}}
445 | {"buy":{"11000":{"q":1}},"total":{"t":"DOLLAR_OFF","v":2.25}}
Run Code Online (Sandbox Code Playgroud)
我的预期输出:
ID | ArticleInfo
123 | 10000
445 | 11000
Run Code Online (Sandbox Code Playgroud)
相当卡住了。