根据表sql中的行替换字符串中的字符

时间:2012-10-24 14:57:07

标签: sql sql-server-2008

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

我有一个包含2列的'dbo.CharacterMappings'表:'CharacterToFilter'和'ReplacementCharacter'。

假设此表中有3条记录:

Filter   Replacement    
$        s
@        a
0        o

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

即。 'Hell0 c @ t $'需要成为'Hello cats'。

我无法想到任何方法这样做而不依赖于表变量然后循环它。即有一个带有'count'列的表变量,然后使用循环根据此列一次选择1行。然后我可以使用REPLACE函数一次更新一个字符。

编辑:我应该注意,我总是要删除这些字符(例如,我不需要担心$ 5 - > s5)。

2 个答案:

答案 0 :(得分:12)

declare @s varchar(50)= 'Hell0 c@t$'
select @s = REPLACE(@s, CharacterToFilter, ReplacementCharacter) 
    from CharacterMappings
select @s

答案 1 :(得分:6)

你可以创建一个函数:

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