declare @str varchar(50)='GoodLuck Markand'
declare @replacedString varchar(50)
set @replacedString = replace(@str,'Good','Better')
print @replacedString
我希望输出不变,因为没有像'Good'这样的单词。 但输出是'BetterLuck Markand'。
我希望MS SQL Replace函数比较确切的单词然后替换它。 我怎么能这样做?
答案 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 '
。最后使用Ltrim
和Rtrim
删除字符串
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可以是字符或二进制数据类型。