2015-11-30 137 views
0

是否可以使用替换功能替换部分空格分隔的字符串?MYSQL替换空格分隔的字符串的一部分

例如如果我有以下字符串'123456 456 789'并且想用'XXXXX'替换第二次出现的'456'。

我已经使用了以下尝试:

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

的问题是它会取代“456”第一次出现为好。由于'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

使用MySQL更换,SUBSTR或定位

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' +” '+' 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); 
+0

你能解释一下你的代码是干什么的吗? – nwellnhof

+0

@nwellnhof我编辑了答案来解释 – genespos