Я бы использовал функцию 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]%'
, чтобы предотвратить изменение других строк.
сработало хорошо, спасибо @Remco K. и спасибо Йонасу Метцлеру за дополнение, это тоже было полезно
Регулярный запрос 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
и твоя лучшая попытка?