McDeFF
@McDeFF
Мда.

Как заменить только первое вхождение в строке?

Мне нужно выполнить UPDATE строки и у поля parent со значением "14 11 10 11 52" (это примерное значение, на деле оно будет вообще любым) удалить первое вхождение "11", а второе и последующие не трогать. Как это сделать?
  • Вопрос задан
  • 368 просмотров
Решения вопроса 1
-- строка, в которой нужно провести поиск
SET @parent = '14 11 10 11 52';
-- строка, которую нужно найти
SET @search = '11';

-- найти начальную позицию нужной строки
SELECT INSTR(@parent, @search);

-- зная расположение и размер подстроки, можно вырезать фрагмент текста
-- первая часть
SELECT SUBSTR(@parent, 1, INSTR(@parent, @search) - 1);
-- хвост
SELECT SUBSTR(@parent, INSTR(@parent, @search) + LENGTH(@search));

-- все вместе
SELECT CONCAT
(
  SUBSTR(@parent, 1, INSTR(@parent, @search) - 1), 
  SUBSTR(@parent, INSTR(@parent, @search) + LENGTH(@search))
);


Грубый вариант с UPDATE будет примерно таким (лучше процедуру сделать и/или передавать строку поиска через параметр):

UPDATE example SET parent = CONCAT
(
  SUBSTR(parent, 1, INSTR(parent, '11') - 1), 
  SUBSTR(parent, INSTR(parent, '11') + LENGTH('11'))
);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
unitby
@unitby
В MariaDB можно юзать такой код

SELECT REGEXP_REPLACE('14 11 10 11 52 11 11 78 65', '(11.)(.*$)', '\\2')
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы