mysql将每行数据的最后N个字符移动到下一行

mysql将每行数据的最后N个字符移动到下一行,mysql,database,mariadb,Mysql,Database,Mariadb,我想把每行数据的最后3个字符移到下一行,第一行用xxx填充 例如: 现在我有了第一张桌子,我想要第二张桌子,谢谢 [更新] mysql版本是5.7.22,不支持滞后函数如果您的mysql/MariaDB版本支持窗口函数,并且您已经创建了Table Two,那么您可以像这样插入新行: insert into TableTwo(id, num) select id, concat( coalesce(lag(right(num, 3)) over (order by id), 'x

我想把每行数据的最后3个字符移到下一行,第一行用xxx填充

例如:

现在我有了第一张桌子,我想要第二张桌子,谢谢

[更新]


mysql版本是5.7.22,不支持滞后函数

如果您的mysql/MariaDB版本支持窗口函数,并且您已经创建了Table Two,那么您可以像这样插入新行:

insert into TableTwo(id, num)
select
  id,
  concat(
    coalesce(lag(right(num, 3)) over (order by id), 'xxx'), 
    coalesce(left(num, 2), '')
  ) num
from (
  select * from TableOne
  union all
  select max(id) + 1, null from TableOne
) t;
请参阅。

如果没有窗口功能,您可以通过自连接来实现:

insert into TableTwo(id, num)
select
  t.id,
  concat(
    coalesce(right(t1.num, 3), 'xxx'), 
    coalesce(left(t.num, 2), '')
  ) num
from (
  select * from TableOne
  union all
  select max(id) + 1, null from TableOne
) t left join TableOne t1
on t1.id = t.id - 1;
请参阅。

结果:

> id | num  
> -: | :----
>  1 | xxxab
>  2 | cde01
>  3 | 23456
>  4 | 789

你为什么要这么做?你的MySql/MariaDB版本是什么?谢谢!但是我的mysql版本是5.7.22,不支持延迟function@artwl见我的第二个问题。如果ID之间没有间隙,它将起作用。