:
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