6

我需要用一些映射字符替换字符串中的字符列表。

我有一个表“dbo.CharacterMappings”,有 2 列:“CharacterToFilter”和“ReplacementCharacter”。

假设这张表有3条记录:

Filter   Replacement    
$        s
@        a
0        o

如何根据这些映射替换字符串中的所有过滤器字符?

ie 'Hell0 c@t$' 需要变成 'Hello cats'。

如果不求助于表变量然后循环遍历它,我真的想不出任何方法来做到这一点。即有一个带有“计数”列的表变量,然后使用循环根据该列一次选择 1 行。然后我可以使用 REPLACE 函数一次更新一个字符。

编辑:我应该注意,我总是想去掉这些字符(例如,我不需要担心 $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 回答