2012-08-03 94 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提供替換功能,那麼爲什麼要編寫自己的代碼來完成相同的任務?