2015-11-30 180 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