2012-08-03 86 views
1

我有一个下面的函数和输出,它基本上是找到字符串中的特定字母,并用一些其他字母替换它们,例如在此字符串中abcde我想用xy替换de,所以我给@input = abcde@find = de@replace = xy,所以我得到的输出作为abcxy,但如果假设我有一个字符串hat,我想用mc更换ht,我该如何实现这一目标?替换SQL Server中的字符串

我必须找到解决方案,而在我的函数使用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') 
+3

为什么你需要一个功能?为什么不直接使用替换函数?你无法解决的问题是什么?这听起来很有用,看起来不错?为什么不只是调用你需要执行的所有替换的替换函数? – CloudyMarble 2012-08-03 05:27:46

回答

3

最简单的方法是,运行功能的第二时间:-)

select dbo.replace_letters(dbo.replace_letters('hat', 'h', 'm'), 't', 'c') 
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') 

答案是:

MAC

xaxyaaxyay

1

只需运行

选择替换(REPLACE( '帽子', 'H', 'M'),'T ','C')。

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