2014-12-09 82 views
2
declare @str varchar(50)='GoodLuck Markand' 
declare @replacedString varchar(50) 
set @replacedString = replace(@str,'Good','Better') 
print @replacedString 

我希望输出保持不变,因为没有像'Good'这样的单个单词。 但输出结果是'BetterLuck Markand'。使用ms sql server替换整个单词“替换”

我想MS SQL替换函数比较确切的单词,然后将其替换。 我该怎么做?

+0

它正在工作,因为它应该。 – leppie 2014-12-09 12:29:51

+0

@NoDisplayName。它的确是。但是我想要一个功能来比较整个单词,然后替换它。 – 2014-12-09 12:31:47

+0

投票结束 - 这不是代替如何工作,你也没有努力自己写一个函数。基本上,你滥用stackoverflow作为一个代码写作服务没有任何努力从你身边。 – TomTom 2014-12-09 13:51:22

回答

0

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

DECLARE @str VARCHAR(50)='Good Luck Good MarkandGood Good' 
DECLARE @replacedString VARCHAR(50) 

SELECT rtrim(ltrim(Replace(replace(' '[email protected]+' ',' Good ',' Better '), 
' Good ',' Better '))) 
+1

我给出了'Good Good Luck Good MarkandGood Good'的输入,我得到的输出是'Better Good Luck Better MarkandGood Better'。检查第二个好没有被替换。 – 2014-12-09 12:54:07

+0

@Kumar - 立即更新我的答案。 – 2014-12-09 13:41:20

+0

工作正常........ – 2014-12-09 13:46:22

0

这并不似乎是替换的功能,按照MSDN;您必须在被搜索和替换的单词的两侧使用空格。

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

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

参考MSDN

语法

REPLACE (string_expression , string_pattern , string_replacement) 

参数

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

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

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

2

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

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 

输入:

良好好运好运好

结果:

更好更好的运气更好的好运更好

+2

尝试用这个字符串'Good GoodLuck Good MarkandGood Good'。 – 2014-12-09 13:39:36

+2

感谢您的建议再次更新了代码。现在试试。 – Veera 2014-12-09 14:11:13

+2

试试这个字符串'GoodMarkAnd'。它什么都不给。 – 2014-12-09 14:20:23