mysql переместить последние N символов каждой строки данных на следующую строку - PullRequest
1 голос
/ 04 августа 2020

Я хочу переместить последние 3 символа каждой строки данных в следующую строку, первая строка заполнится xxx.

пример:

введите описание изображения здесь

Теперь у меня TableOne, я хочу получить TableTwo, спасибо!

[обновление]

mysql версия 5.7.22, не поддерживает функцию задержки

1 Ответ

1 голос
/ 04 августа 2020

Если ваша версия MySql / MariaDB поддерживает оконные функции и вы уже создали TableTwo, вы можете вставить новые строки следующим образом:

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;

См. demo .

Результаты:

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