2012-10-24 84 views
6

我需要用一些映射字符替換字符串中的字符列表。根據表中的行替換字符串中的字符sql

我有一個表'dbo.CharacterMappings'與2列:'CharacterToFilter'和'ReplacementCharacter'。

說,有3條記錄在此表中:

Filter Replacement  
$  s 
@  a 
0  o 

我怎麼會取代所有的過濾特性的基於這些映射一個字符串?

即'Hell0c @ t $'需要變成'你好貓'。

我不能真正想到這樣做,而不訴諸表變量,然後通過它循環。即有一個帶有「count」列的表變量,然後使用循環根據此列一次選擇1行。然後,我可以使用REPLACE功能逐個更新字符。

編輯:我應該注意到我總是希望去掉這些字符(例如我不需要擔心$ 5 - > s5)。

回答

11
declare @s varchar(50)= 'Hell0 [email protected]$' 
select @s = REPLACE(@s, CharacterToFilter, ReplacementCharacter) 
    from CharacterMappings 
select @s 
+0

哇,謝謝。我不知道/從未見過REPLACE就這樣用過! – RobH

+0

這隻會在一個函數或存儲過程中工作,但它仍然非常漂亮。 – LittleBobbyTables

+0

@LittleBobbyTables與幾個分號,我想你可以在任何地方使用它? – podiluska

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 [email protected]$'); 

回報Hello cats

+0

代碼將成爲函數的一部分,但謝謝指出。 – RobH

+1

謝謝蒂姆,這幫助我建立了一個大文本搜索替換。也節省了我的時間。 – Ravia