替换给定字符串中的字符

时间:2015-07-16 04:49:37

标签: sql sql-server-2008 sql-server-2012

String =“Vishal Hariharan”..将第一个“H”替换为“A”SQL

我有一个场景,我想只替换其他“H”字符中的第一个“H”字符,并保持原样保留。

2 个答案:

答案 0 :(得分:2)

Stack Overflow上有许多简单的答案,没有考虑到被搜索的字符在字符串中不存在的情况。在这些情况下,如果字符串中不存在替换字符,则SQL将返回NULL。试试这个:

declare @name varchar(max), @ToReplace varchar(max), @ReplaceWith varchar(max)
set @name = 'Vishal Hariharan'
set @ToReplace = 'H'
set @ReplaceWith = 'A'
select @name
select stuff(@name, charindex(@ToReplace,@name),1, CASE WHEN charindex(@ToReplace,@name) <> 0 THEN @ReplaceWith ELSE @ToReplace END)

CASE语句只是检查字符串中是否存在字符,如果字符不存在,则它会将匹配的字符替换为自身。

答案 1 :(得分:1)

DECLARE @findChar varchar(max)='H'
DECLARE @RepalceCharacter varchar(max)='A'
DECLARE @OriginText varchar(max)='Vishal Hariharan'

IF (CharIndex(@findChar, @OriginText)<>0)
    SELECT Stuff(@OriginText, CharIndex(@findChar, @OriginText), Len(@findChar), @RepalceCharacter)
ELSE
SELECT @OriginText