我有一个翻译表,里面有两个钱栏:原始字符和要替换它的字符。 A列中没有字符包含在B列中,反之亦然。给定一个字符串,我想迭代翻译表的每一行,用A列中的字符替换A列中找到的输入字符串的每个字符,并返回完全翻译的结果。我知道如何使用while循环执行此操作,但如果可能的话,我不想使用它,因为它们可能很慢。
更新:
翻译表示例:
ColA | ColB
% | P
$ | D
输入字符串:%EN $ ANT
预期输出:PENDANT
答案 0 :(得分:0)
如果你想使用数据库来解决这类问题,你可以定义一个为你做这个的函数,或者你可以这样做:
DECLARE @t TABLE (_from CHAR(1), _to CHAR(1), _order int);
INSERT INTO @t
( _from, _to, _order )
VALUES
('%','P',1),
('$','D',2)
DECLARE @inp VARCHAR(20) = '%EN$ANT';
WITH cte AS (
SELECT REPLACE(@inp,_from,_to) replacement, _order FROM @t WHERE _order = 1
UNION ALL
SELECT REPLACE(replacement, _from,_to) , [@t]._order FROM cte
JOIN @t ON [@t]._order = cte._order+1
)
SELECT TOP 1 replacement
FROM cte replacement
ORDER BY _order desc
结果:
replacement
PENDANT
_order并不重要,它只是确保我们一次更换一次。