使用 SQL Server 2008 R2 - 2016。我继承了一个用于创建友好 URL 的函数 - 即多字符替换。我刚打开它,发现代码似乎“不理想”。尽管此处的所有内容都是有原因的,但有些替换看起来有点奇怪。我在想,在实现重复替换方面是否有更高效的选项。我知道你可以嵌套它们,但是对于这么多替换来说,那会变得非常丑陋。我可以将它们推入一个表中并通过循环来执行操作,但我可以想象我们会受到的效率损失。有没有人有更好的替换方法?我看着这段代码,确信还有更好的选择,但我不知道是什么。任何建议都将不胜感激。
CREATE FUNCTION dbo.MakeFriendlyURL (@stringToConvert NVARCHAR(MAX))
RETURNS NVARCHAR(MAX)
AS
BEGIN
DECLARE @Result NVARCHAR(MAX)
SELECT @Result = CAST(@stringToConvert AS VARCHAR(MAX))
SELECT @Result = REPLACE(@Result, 'ä', 'ae')
SELECT @Result = REPLACE(@Result, 'ö', 'oe')
SELECT @Result = REPLACE(@Result, 'ü', 'ue')
SELECT @Result = REPLACE(@Result, 'Ä', 'Ae')
SELECT @Result = REPLACE(@Result, 'Ö', 'Oe')
SELECT @Result = REPLACE(@Result, 'Ü', 'Ue')
SELECT @Result = REPLACE(@Result, 'ß', 'ss')
SELECT @Result = REPLACE(@Result, 'é', 'e')
SELECT @Result = REPLACE(@Result, 'ê', 'e')
SELECT @Result = REPLACE(@Result, 'à', 'a')
SELECT @Result = REPLACE(@Result, 'è', 'e')
SELECT @Result = REPLACE(@Result, 'i', 'i')
SELECT @Result = REPLACE(@Result, 'l', 'l')
SELECT @Result = REPLACE(@Result, 'L', 'l')
SELECT @Result = REPLACE(@Result, 'd', 'd')
SELECT @Result = REPLACE(@Result, 'ø', 'o')
SELECT @Result = REPLACE(@Result, 'Þ', 'th')
SELECT @Result = REPLACE(@Result, ' ', '-')
SELECT @Result = REPLACE(@Result, '/', '-')
SELECT @Result = REPLACE(@Result, '&', '-')
SELECT @Result = REPLACE(@Result, '%', '-')
SELECT @Result = REPLACE(@Result, ',', '-')
SELECT @Result = REPLACE(@Result, ';', '-')
SELECT @Result = REPLACE(@Result, ':', '-')
SELECT @Result = REPLACE(@Result, '_', '-')
SELECT @Result = REPLACE(@Result, '+', '')
SELECT @Result = REPLACE(@Result, '.', '')
SELECT @Result = REPLACE(@Result, '""', '')
SELECT @Result = REPLACE(@Result, '*', '')
SELECT @Result = REPLACE(@Result, '<', '')
SELECT @Result = REPLACE(@Result, '>', '')
SELECT @Result = REPLACE(@Result, '?', '')
SELECT @Result = REPLACE(@Result, '‘', '')
SELECT @Result = REPLACE(@Result, '’', '')
SELECT @Result = REPLACE(@Result, CHAR(39), '')
WHILE CHARINDEX('--', @Result) > 0
BEGIN
SET @Result = REPLACE(@Result, '--', '-')
END
WHILE CHARINDEX('-', @Result) = 1
BEGIN
SET @Result = RIGHT(@Result, LEN(@Result) - 1)
END
WHILE LEN(@Result) > 0 AND SUBSTRING(@Result, LEN(@Result), 1) = '-'
BEGIN
SET @Result = LEFT(@Result, LEN(@Result) - 1)
END
RETURN @Result
END
GO
SELECT dbo.MakeFriendlyURL('A,B & C Tyres')
这主要用作我们向客户推出的导入流程的一部分,因此它的实现方式是RBAR,这不是理想的。但是由于该函数在多个表上被多次使用,因此我理解为什么最初会开发出它。随着数据集的增长,这正在变得越来越成问题。
ø
仍然是ø
。 - Panagiotis Kanavos