Как заменить слово в тексте?

Статус
В этой теме нельзя размещать новые ответы.

Dark Wizard

Гуру форума
Регистрация
23 Сен 2007
Сообщения
194
Реакции
80
Проблема:

У меня есть таблица например users, в ней есть поля pole1, pole2, pole3. Как выглядит sql запрос, который во всех записях всех полей заменит слово1 на слово2? Запись может содержать большой текст (мне нужно переименовать всех player1 на player2).

Спасибо.
 
Запись может содержать большой текст (мне нужно переименовать всех player1 на player2)
Я так понимаю нужно заменить часть записи
т.е. pole1 = "player1 блабла бла" его надо поменять на "player2 блабла бла"
а блабла бла не трогать?
 
UPDATE TableName SET ColumnName=REPLACE(ColumnName,'OldSubString','NewSubSrting') WHERE ColumnName LIKE '%OldSubString%'
 
UPDATE TableName SET ColumnName=REPLACE(ColumnName,'OldSubString','NewSubSrting') WHERE ColumnName LIKE '%OldSubString%'

а если требуется заменить "мастерские", но не трогать "автомастерские"? Как я понимаю, REPLACE() уже не поможет :(
 
а если требуется заменить "мастерские", но не трогать "автомастерские"? Как я понимаю, REPLACE() уже не поможет :(


REPLACE ищет вхождения искомой подстроки, в колонке и изменяет его, так что будет работать. Можно проверить:

 
REPLACE ищет вхождения искомой подстроки, в колонке и изменяет его, так что будет работать. Можно проверить:

*** скрытое содержание ***

У меня не работает.
SELECT REPLACE("танки и станки", "танки", "'тигры' и 'пантеры'")
дает "'тигры' и 'пантеры' и с'тигры' и 'пантеры'".
А надо "'тигры' и 'пантеры' и станки". Т.е. чтоб "танки" заменялись, а "станки" - нет. Я это и имел в виду в своем последнем посте.
 
pavel012007
а эту замену надо производить непосредственно в базе? т.е. может проще через php preg_replace?

а с чистым mysql народ развлекается так:

смотри может поможет
 
midw0rk
посмотри внимательно, станки у тебя тоже заменились, а pavel012007 этого не хочет.
или ты код не тот привел.

ксати в Оракле есть regexp_replace, но тоже не полный, модификатор \b - границу слова не поддерживает, т.е. даже переход на оракл не позволит избежать "колбасы" с replace'ами
 
pavel012007
а эту замену надо производить непосредственно в базе? т.е. может проще через php preg_replace?

Конечно проще, но насколько это эффективно будет при выполнении запроса? Фактически базу нужно прогнать через скрипт. А если база большая и делать это нужно регулярно?
Мускул использует, как я понимаю, уже скомпиленную реализацию REPLACE, которая работает в разы быстрее написанной на пхп. Я думал про хранимые процедуры - но они тоже будут для каждой записи интерпретироваться, т.е. скорость выполнения запроса останет желать лучшего. В идеале в мускуле должен быть свой набор функций preg_NNNNNN, но я не нашел ничего похожего.
 
UPDATE имя_таблицы SET имя_поля1=значение1, имя_поля2=значение2, имя_поля3=значение3;
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху