MYSQL替换空格分隔字符串的一部分

时间:2015-11-30 10:49:36

标签: mysql regex string

是否可以使用替换函数替换部分空格分隔的字符串?

e.g。如果我有以下字符串' 123456 456 789'并希望取代第二次出现的'''使用' XXXXX'。

我尝试过使用以下内容:

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

问题在于它将取代第一次出现的'''同样。我无法将替换语句中的模式更改为' 456'作为'''''可能出现在单元格的开头或结尾。有人有想法吗?

3 个答案:

答案 0 :(得分:0)

使用REGEXP_REPLACE执行此操作:

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

正则表达式语法添加单词分隔符[[:<:]][[:>:]](匹配字符串的开头和结尾以及正则表达式单词 \w和“不是单词”之间\W)。

NB :正则表达式在语法和逻辑上都是正确的,但上面的代码未经测试

答案 1 :(得分:0)

使用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

答案 2 :(得分:0)

您可以尝试:

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

与MySql参考手册中一样:

  

SUBSTRING_INDEX在指定之前返回字符串中的子字符串   分隔符的出现次数

看看here

如果使用否定索引,则从字符串的末尾开始

CONCAT_WS返回与分隔符的连接。所以:

  

'123456'+''+'xxxx'+''+'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);