mysql表中字段financing_info是text类型的数组,数组里面是json数据,例如:[{'Round': 'Series B', 'Amount': '$ 50 M', 'Valuation': '--', 'Date': 'Nov 03, 2021', 'Investors ': 'Hack VC*, Polychain*, Jump Capital, Alameda Research, Eterna Capital, Uncorrelated, Nothing Research, Palm Drive Capital, Acheron Trading'}, {'Round': 'Strategic', 'Amount': '--', 'Valuation': '--', 'Date': 'Jul, 2018', 'Investors ': 'FBG Capital, Bitmain, GBIC, Matrix Partners China, Palm Drive Capital, Perseverance Capital'}],判断数组的json数据中存在Round、Valuation则将其移除
时间: 2023-09-16 12:14:27 浏览: 396
可以使用MySQL中的JSON函数来实现这个需求。具体的实现步骤如下:
1. 使用 `JSON_REMOVE` 函数移除数组中的指定元素。
2. 使用 `JSON_EXTRACT` 函数提取数组中的每个元素,遍历每个元素,对于每个元素,使用 `JSON_REMOVE` 函数移除元素中的 Round 和 Valuation 键。
下面是示例代码:
```
UPDATE table_name SET financing_info = (
SELECT JSON_ARRAYAGG(new_element) FROM (
SELECT JSON_REMOVE(element, '$.Round', '$.Valuation') AS new_element
FROM JSON_TABLE(financing_info, '$[*]' COLUMNS (
element JSON PATH '$'
)) jt
) t
);
```
这个代码将会更新表中 `financing_info` 字段的值,移除其中每个元素的 `Round` 和 `Valuation` 键。解释一下:
1. `JSON_TABLE(financing_info, '$[*]' COLUMNS (element JSON PATH '$'))` 函数将 `financing_info` 字段中的 JSON 数组转换为一张虚拟表,表中包含一个列 `element`,每一行对应 JSON 数组中的一个元素。
2. `JSON_REMOVE(element, '$.Round', '$.Valuation')` 函数移除 `element` 中的 `Round` 和 `Valuation` 键。
3. `JSON_ARRAYAGG(new_element)` 函数将修改后的 JSON 元素重新组装为一个新的 JSON 数组。
注意,这个代码会更新表中所有行的值,如果只需要更新满足一定条件的行,可以在代码中添加 WHERE 条件。
阅读全文