MySQL:将值拆分为多行,在MySQL 8上正常,但在MySQL 5.7上不起作用



我是mysql语言的新手。我正在尝试将值拆分为多个记录,修剪记录本身的第一个和最后一个字符。我的起始表类似:

|---------------------|------------------|
|          ID         |        Name      |
|---------------------|------------------|
|          1          |       ~3~4~      |
|---------------------|------------------|
|          2          |      ~1~5~2~     |
|---------------------|------------------|

我想要的输出是:

|---------------------|------------------|
|          ID         |        Name      |
|---------------------|------------------|
|          1          |         3        |
|---------------------|------------------|
|          1          |         4        |
|---------------------|------------------|
|          2          |         1        |
|---------------------|------------------|
|          2          |         5        |
|---------------------|------------------|
|          2          |         2        |
|---------------------|------------------|

我修改了我在网上找到的一个查询,它适用于 MySQL 8,但不适用于 MySql 5.7(这是我的版本(

select t.id, j.name
from mytable t
join json_table(
replace(json_array((TRIM(BOTH '~' FROM t.name))), '~', '","'),
'$[*]' columns (name varchar(50) path '$')
) j

有人可以帮助我吗?这里是SQL小提琴

提前致谢

SELECT id, SUBSTRING_INDEX(SUBSTRING_INDEX(mytable.name, '~', numbers.num), '~', -1) name
FROM mytable
JOIN ( SELECT 2 AS num UNION SELECT 3 UNION SELECT 4 ) AS numbers
HAVING name > ''
ORDER BY id, name;

动态表中numbers的数字量(连续,从 2 开始(必须不小于每个字段值的最大单独值数量(在显示的示例数据中为 3(,否则其余值将丢失。

如果单独的值可能重复,您可以添加 DISTINCT。

相关内容

  • 没有找到相关文章

最新更新