gpt4 book ai didi

SQL Server 多个替换

转载 作者:行者123 更新时间:2023-12-01 23:38:32 25 4
gpt4 key购买 nike

使用 SQL Server 2008 R2 - 2016。我继承了我们用来制作友好网址的功能 - 即多个字符替换。我刚刚打开它,代码似乎“不太理想”。

它有效,这里的一切都有充分的理由在那里,尽管一些替代品看起来有点奇怪。我想知道是否有更有效的方法来实现重复替换。

我知道你可以将它们嵌套在一起,但是有这么多的替代品会像罪恶一样丑陋。我可以将它们放入一个表中并循环遍历它,但我可以想象我们将承受的效率损失。有没有人有更好的方法来进行这些替换?我查看了代码,我确信必须有更好的选择,但我不知道是什么。

非常感谢收到的任何选项。

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。但是这个函数针对多个表多次使用,所以我明白为什么它最初是这样开发的。随着数据集的增长,这变得越来越成为一个问题。

最佳答案

也许像这样的东西会更高效并且更容易维护。

通过使用表变量,替换顺序似乎保持正确。我还没有看到异常/失败。

如果您使用表而不是表变量,请务必包含序列号和排序依据。

示例

Declare @S nvarchar(max) = 'A,B & C Tyres'

Declare @MapValues table (MapFrom nvarchar(50),MapTo nvarchar(50))
Insert Into @MapValues values
( 'ä', 'ae'),
( 'ö', 'oe'),
( 'ü', 'ue'),
( 'Ä', 'Ae'),
( 'Ö', 'Oe'),
( 'Ü', 'Ue'),
( 'ß', 'ss'),
( 'é', 'e'),
( 'ê', 'e'),
( 'à', 'a'),
( 'è', 'e'),
( 'i', 'i'),
( 'l', 'l'),
( 'L', 'l'),
( 'd', 'd'),
( 'ø', 'o'),
( 'Þ', 'th'),
( ' ', '-'),
( '/', '-'),
( '&', '-'),
( '%', '-'),
( ',', '-'),
( ';', '-'),
( ':', '-'),
( '_', '-'),
( '+', ''),
( '.', ''),
( '""', ''),
( '*', ''),
( '<', ''),
( '>', ''),
( '?', ''),
( '‘', ''),
( '’', ''),
( CHAR(39), ''),
-- Cleanup
( '-----', '-'),
( '----', '-'),
( '---', '-'),
( '--', '-'),
( ' ', '-'),
( ' ', '-'),
( ' ', '-'),
( ' ', '-')


Select @S=Replace(@S,MapFrom,MapTo)
From @MapValues

Select @S

返回

A-B-C-Tyres

关于SQL Server 多个替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48095007/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com