使用ms sql server“replace”替换整个单词

时间:2014-12-09 12:26:37

标签: sql-server

declare @str varchar(50)='GoodLuck Markand'
declare @replacedString varchar(50)
set @replacedString = replace(@str,'Good','Better')
print @replacedString

我希望输出不变,因为没有像'Good'这样的单词。 但输出是'BetterLuck Markand'。

我希望MS SQL Replace函数比较确切的单词然后替换它。 我怎么能这样做?

3 个答案:

答案 0 :(得分:3)

试试这个:(按预期工作)

declare @str varchar(500)
set @str = 'Good Good Good Good Good Good Good Good Luck Good GoodLuck MarkAndGood GoodMarkAnd MarkAndGood Good'
declare @replacedString varchar(500)
SET @replacedString = replace(@str,' Good ',' Better ')

SET @replacedString = replace(@replacedString,' Good ',' Better ')

SET @replacedString = CASE WHEN CHARINDEX('Good ', @replacedString) = 1 THEN 
                        STUFF(@replacedString, 1, Len('Good'), 'Better')
                      ELSE @replacedString END

SELECT CASE WHEN CHARINDEX(REVERSE(' Good'), REVERSE(@replacedString)) = 1 THEN 
                             Reverse(STUFF(Reverse(@replacedString), CHARINDEX(Reverse(' Good'), 
                             Reverse(@replacedString)), Len(' Good'), Reverse(' Better')))
                      ELSE @replacedString END AS A

输入:

Good Good Luck Good GoodLuck Good

结果:

更好的运气更好GoodLuck

答案 1 :(得分:0)

在字符串的开头和结尾添加empty space,然后将' Good '替换为' Better '。最后使用LtrimRtrim删除字符串

开头和结尾的空白区域
DECLARE @str VARCHAR(50)='Good Luck Good MarkandGood Good'
DECLARE @replacedString VARCHAR(50)

SELECT rtrim(ltrim(Replace(replace(' '+@str+' ',' Good ',' Better '),
' Good ',' Better ')))

答案 2 :(得分:0)

根据MSDN,这似乎不是Replace的功能;您必须在搜索和替换的单词的两侧使用给定空格。

replace(@str,' Good ',' Better ')

将所有出现的指定字符串值替换为另一个字符串值。

参考MSDN

<强>语法

REPLACE ( string_expression , string_pattern , string_replacement )

<强>参数

string_expression 是否要搜索字符串表达式。 string_expression可以是字符或二进制数据类型。

string_pattern是要找到的子字符串。 string_pattern可以是字符或二进制数据类型。 string_pattern不能是空字符串(&#39;&#39;),并且不得超过适合页面的最大字节数。

string_replacement 是替换字符串。 string_replacement可以是字符或二进制数据类型。