Sql 替换给定字符串中的字符
String=“Vishal Hariharan”。。将第一个“H”替换为“A”SQL 我有一个场景,在其他“H”位置中,我只想替换第一个“H”字符,并保持原样。Sql 替换给定字符串中的字符,sql,sql-server-2008,sql-server-2012,Sql,Sql Server 2008,Sql Server 2012,String=“Vishal Hariharan”。。将第一个“H”替换为“A”SQL 我有一个场景,在其他“H”位置中,我只想替换第一个“H”字符,并保持原样。DECLARE@findChar varchar(max)='H' DECLARE @findChar varchar(max)='H' DECLARE @RepalceCharacter varchar(max)='A' DECLARE @OriginText varchar(max)='Vishal Hariharan' IF (
DECLARE@findChar varchar(max)='H'
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
声明@RepalCharacter varchar(max)='A'
声明@OriginText varchar(max)='Vishal Hariharan'
IF(CharIndex(@findChar,@OriginText)0)
选择Stuff(@OriginText,CharIndex(@findChar,@OriginText),Len(@findChar),@repalchecharacter)
其他的
选择@OriginText
对于这种堆栈溢出,有许多简单的答案,但没有考虑正在搜索的字符在字符串中不存在的情况。在这些情况下,如果字符串中不存在替换字符,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)
声明@name varchar(max)、@ToReplace varchar(max)、@replacetwith varchar(max)
set@name='Vishal Hariharan'
设置@ToReplace='H'
设置@ReplaceWith='A'
选择@name
选择stuff(@name,charindex(@ToReplace,@name),1,charindex(@ToReplace,@name)0时的大小写,然后选择@ReplaceWith ELSE@ToReplace END)
CASE
语句只检查字符串中是否存在字符,如果不存在,则用自身替换匹配字符。这里没有问题。你没有表现出任何试图自己解决问题的企图。请阅读:简单搜索“[sql server]replace first occurrence”将得到以下第一个结果:但是您链接到的答案以及SO上类似问题的许多其他答案都是不正确的,因为它们没有考虑正在搜索的字符在字符串中不存在的情况。@MarkE well,我想说的是,其他的答案是有限的或不完整的,但不是不正确的。我们不知道OP的全部要求,因为没有说明。问题并没有说“通过阅读其他答案,我发现我可以用stuff
函数替换第一个出现的子字符串,但当我的字符串中没有目标子字符串时,它就不起作用了”。很高兴你能不厌其烦地给出一个完整的答案,特别是当OP没有主动性的时候,但我感觉不那么慷慨。@All。。谢谢你的回答。。。我正试着处理一些事情,给出的答案纠正了我。