我有一个问题:我使用了json_remove和json_search,但它对mysql 8.0中的json_search结果不起作用
**数据库:**books数据表。
|public_unit_ids|
'[5630, 5631]'
查询:
select
replace(json_search(REGEXP_REPLACE(public_unit_ids, '(5630|5631)', '""'), 'all', ''), '"', '') as new_js_replace,
json_remove(public_unit_ids, replace(json_search(REGEXP_REPLACE(public_unit_ids, '(5630|5631)', '""'), 'one', ''), '"', '')) as new_js_remove from books
结果:
| 新建js搜索|新建js删除|
| - -|- -|
| [[0],[1]]|“【5631,5632】”|
**预期:**删除5630和5631
| 新建js搜索|新建js删除|
| - -|- -|
| [[0],[1]]|【5632】|
1条答案
按热度按时间c9x0cxw01#
一个问题是JSON_SEARCH()只能搜索字符串,而不能搜索整数(请参见https://bugs.mysql.com/bug.php?id=90085)。
这里有另一个解决方案。
给定一个示例JSON数组:
JSON_TABLE()函数将数组元素Map到行:
现在,您可以使用常规的
WHERE
子句来筛选这些行。可以将结果重新聚合到一个JSON数组中,参数为
JSON_ARRAYAGG()
。我将其显示为多个步骤只是为了解释它是如何工作的。您不需要执行所有步骤,只需要执行最后一个步骤。