:
UPDATE mytable SET mytext = REPLACE(mytext, 'Alphabet ', 'ABC')
將正常運行REPLACE
會留下完整的值,如果沒有匹配。但是,這會觸動表格中的全部行,它們自己替換了一些值 - 這至少不是非常有效。此外,即使不在字符串的開頭,這也會取代世界上任何一個發生的事件。
如果你需要的東西更強大的,你應該添加過濾器:
UPDATE mytable SET mytext = REPLACE(mytext, 'Alphabet ', 'ABC')
WHERE mytext LIKE 'Alphabet %'
見http://sqlfiddle.com/#!4/16512/1
隨着問題被編輯,支持多種替換字符串,你確實可以使用CASE
聲明:
UPDATE mytable
SET mytext =
CASE
WHEN (mytext LIKE 'Alphabet %') THEN REPLACE(mytext, 'Alphabet ', 'ABC')
WHEN (mytext LIKE 'Dookickey %') THEN REPLACE(mytext, 'Dookickey ', 'DEF')
WHEN (mytext LIKE 'Goofiness %') THEN REPLACE(mytext, 'Goofiness ', 'GHI')
ELSE mytext
-- ^^^^^^
-- let unchanged
END;
請參閱http://sqlfiddle.com/#!4/31531c/1
與我的第一個解決方案一樣,這將觸碰全部行的表格。和以前一樣,你可以使用過濾器來避免這種情況。在這種情況下,ELSE
條款是不是不再需要(因爲不匹配的行則不):
UPDATE mytable
SET mytext =
CASE
WHEN (mytext LIKE 'Alphabet %') THEN REPLACE(mytext, 'Alphabet ', 'ABC')
WHEN (mytext LIKE 'Dookickey %') THEN REPLACE(mytext, 'Dookickey ', 'DEF')
WHEN (mytext LIKE 'Goofiness %') THEN REPLACE(mytext, 'Goofiness ', 'GHI')
END
WHERE mytext LIKE 'Alphabet %'
OR mytext LIKE 'Dookickey %'
OR mytext LIKE 'Goofiness %';
見http://sqlfiddle.com/#!4/44846/1
'UPDATE MYTABLE SET mytext的= REPLACE(mytext的,'字母','ABC')'? – 2014-10-16 21:44:54