1

我在下面有一个函数还有输出,它基本上是在字符串中找到特定的字母并将它们替换为其他一些字母,例如在这个字符串中abcde我想用 替换dexy所以我给出@input = abcde,@find = de@replace = xy,所以我得到了输出as abcxy,但是如果假设我有一个字符串hat并且我想用 and 替换and ,h我该如何实现呢?tmc

而且我必须在函数中不使用 while 循环的情况下找到解决方案

create  FUNCTION dbo.replace_letters
(
  @Input AS VarChar(1000),
  @Find AS VarChar(100),
  @Replace AS VarChar(100)
)
RETURNS VarChar(1000)
AS
BEGIN
   SELECT @Input = REPLACE(@Input, @Find,@Replace)

   return @input
end

--run
select dbo.replace_letters ('abcde', 'ed', 'dc')
4

3 回答 3

3

最简单的方法是第二次运行该函数:-)

select dbo.replace_letters(dbo.replace_letters('hat', 'h', 'm'), 't', 'c')
于 2012-08-03T05:29:05.567 回答
1

只需运行

选择替换(替换('HAT','H','M'),'T','C')。

SQL Server 提供了替换功能,那么为什么要编写自己的功能来完成相同的任务呢?

于 2012-08-03T07:00:23.693 回答
0

试试这个:它将替换@Find的第一个字符并将其替换为@Replace的第一个字符和@Find的第二个字符并将其替换为@Replace的第二个字符。

CREATE  FUNCTION dbo.replace_letters
(
  @Input AS VARCHAR(1000),
  @Find AS VARCHAR(100),
  @Replace AS VARCHAR(100)
)
RETURNS VARCHAR(1000)
AS
BEGIN
   SELECT @Input = REPLACE(REPLACE(@Input, SUBSTRING(@Find,1,1),SUBSTRING(@Replace,1,1)),SUBSTRING(@Find,2,1),SUBSTRING(@Replace,2,1))
   RETURN @input
END

 SELECT dbo.replace_letters('hat','ht','mc')
 SELECT dbo.replace_letters('hahtaahtat','ht','xy')

答案是:

苹果电脑

呸呸呸

于 2012-08-03T05:47:41.313 回答