6

文字列内の文字のリストをマップされた文字に置き換える必要があります。

「CharacterToFilter」と「ReplacementCharacter」の 2 つの列を持つテーブル「dbo.CharacterMappings」があります。

このテーブルに 3 つのレコードがあるとします。

Filter   Replacement    
$        s
@        a
0        o

これらのマッピングに基づいて、文字列内のすべてのフィルター文字をどのように置き換えますか?

つまり、'Hell0 c@t$' は 'Hello cat' になる必要があります。

テーブル変数に頼らずにそれをループすることなく、これを行う方法は本当に考えられません。つまり、「カウント」列を持つテーブル変数があり、ループを使用して、この列に基づいて一度に 1 行を選択します。次に、REPLACE 関数を使用して文字を 1 つずつ更新します。

編集:私は常にこれらの文字を取り除きたいことに注意する必要があります(たとえば、 $5 -> s5 について心配する必要はありません)。

4

2 に答える 2

12
declare @s varchar(50)= 'Hell0 c@t$'
select @s = REPLACE(@s, CharacterToFilter, ReplacementCharacter) 
    from CharacterMappings
select @s
于 2012-10-24T15:05:03.983 に答える
7

関数を作成できます:

CREATE FUNCTION [dbo].[ReplaceAll]
(
    @text varchar(8000)
)
RETURNS VARCHAR(8000)
AS
BEGIN
    SELECT @text = 
       REPLACE(@text,cm.Filter, cm.Replacement)
    FROM    CharacterMappings cm;
    RETURN @text
END

それからこれ

select dbo.[ReplaceAll]('Hell0 c@t$');

戻り値Hello cats

于 2012-10-24T15:19:16.080 に答える