我是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。