2015-11-30 2 views
0

Возможно ли заменить часть строки с разделителями пробела с помощью функции replace?MYSQL Заменить часть строки с разделителем пробела

например. Если у меня есть следующая строка «123456 456 789» и вы захотите заменить второе вхождение «456» на «XXXXX».

Я попытался с помощью следующих действий:

UPDATE table 
set column = REPLACE(column,'456','xxxxx') 
Where....... 

Проблема в том, что он заменит первое вхождение «456», а также. Я не могу просто изменить шаблон в операторе replace на «456», так как «456» может появиться в начале или в конце ячейки. У кого-нибудь есть мысли?

+0

Вы используете MySQL или MS SQL Server? Не помещайте те продукты, которые не задействованы. – jarlh

+0

Использование MySQL для этого – donz90

ответ

0

Использование REGEXP_REPLACE сделать это:

set column = REGEXP_REPLACE(column,'[[:<:]]456[[:>:]]','xxxxx') 

Синтаксис регулярных выражений добавить слова разделителем [[:<:]] и [[:>:]] (матчи в начале и в конце строки и между регулярным выражением словами\w и «не слова» \W).

NB: регулярное выражение синтаксически и логически правильно, но приведенный выше код не тестировался

0

USE MySQL REPLACE, SUBSTR или LOCATE

REPLACE('123456 456 789', 
SUBSTR('123456 456 789', 
LOCATE(' ','123456 456 789'), 
LOCATE(' ','123456 456 789', 
LOCATE(' ','123456 456 789')+1)-LOCATE(' ','123456 456 789')),' xxxxx') 

DEMO

0

Вы можете попробовать:

CONCAT_WS(' ', 
SUBSTRING_INDEX('123456 456 789', ' ', 1), 
'xxxx', 
SUBSTRING_INDEX('123456 456 789', ' ', -1)) 

Как и в MySql справочного руководстве:

SUBSTRING_INDEX Возвращает подстроку из строки до заданного числа появлений разделителя

взглянуть here

Если Вы используете отрицательный индекс он начинается с конца строки

CONCAT_WS Возврат конкатенации с разделителем. Итак:

'123456' +» '+' хххх '+' '+' 789'

Если вы хотите проверить попробовать:

SELECT CONCAT_WS(' ', 
SUBSTRING_INDEX('123456 456 789', ' ', 1), 
'xxxx', 
SUBSTRING_INDEX('123456 456 789', ' ', -1)); 

SELECT SUBSTRING_INDEX('123456 456 789', ' ', 1); 

SELECT SUBSTRING_INDEX('123456 456 789', ' ', -1); 
+0

Можете ли вы объяснить, что делает ваш код и почему он должен работать? – nwellnhof

+0

@nwellnhof Я отредактировал ответ, чтобы объяснить – genespos

Смежные вопросы