Массовое переименование MySQL, перемещение части строковых значений из начала в конец строки

пример У меня есть следующие строковые значения

'[123] X'
'[123] Y'
'[123] Z'
...

Я хочу массово изменить их на

'X [123]'
'Y [123]'
'Z [123]'
...

X, Y, Z являются совершенно случайными, а не последовательными. [123] является постоянным

Я думаю, что приведенный выше пример все объясняет.

и твоя лучшая попытка?

Lelio Faieta 06.05.2024 15:44
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
1
58
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я бы использовал функцию REPLACE().

REPLACE(str, find_string, replace_with)

Сначала удалите [123] из строки. Затем добавьте его еще раз в конец строки:

UPDATE table_name SET column_name = CONCAT(REPLACE(column_name, '[123] ', ''), ' [123]');

Я бы добавил ..WHERE column_name LIKE '[123]%', чтобы предотвратить изменение других строк.

Jonas Metzler 06.05.2024 16:39

сработало хорошо, спасибо @Remco K. и спасибо Йонасу Метцлеру за дополнение, это тоже было полезно

Doe 06.05.2024 17:29

Регулярный запрос MySQL:

select st,
  concat(
      REGEXP_SUBSTR(st, '\\w+$', 1), ' ', 
      REGEXP_SUBSTR(st, '^\\[\\d+\\]', 1)
  ) as result
from T;

Альтернатива:

SELECT st,
  concat(
     SUBSTRING_INDEX(st,' ',-1), ' ',
     SUBSTRING_INDEX(st,' ',1)
  ) as result
FROM T

Немного сложно:

set @r1 = '^\\[\\d+\\]';
set @r2 = '\\w+$';

select st,
   REGEXP_REPLACE(
        REGEXP_REPLACE(st, @r1, REGEXP_SUBSTR(st, @r2, 1), 1),
                @r2, REGEXP_SUBSTR(st, @r1, 1)
   ) as result
from T;

Пример вывода: db<>fiddle

Другие вопросы по теме