Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 替换给定字符串中的字符_Sql_Sql Server 2008_Sql Server 2012 - Fatal编程技术网

Sql 替换给定字符串中的字符

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 (

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 (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。。谢谢你的回答。。。我正试着处理一些事情,给出的答案纠正了我。