我有一个规范地址的功能。我现在要做的是删除有限的指定列表中的任何字符串,如果它们出现在字符串的末尾。假设我要删除的字符串是'st','ave','rd','dr','ct'...如果字符串以这些字符串中的任何一个结束,我想删除它们。使用T-SQL实现这一目标的最佳方法是什么(这将不成为select语句的一部分)?
修改
这是一个接受一个地址并对其进行格式化的函数。我想内联代码和列表,但以最简单的方式。例如,我一直在玩的一些代码是:
if @address LIKE '%st'
SET @address = substring(@address, 1, PatIndex('%st', @address) - 1)
这是一个好方法吗?我怎么能把它放在某种循环中,这样我可以用不同的值(除了st)重复这段代码?
答案 0 :(得分:1)
将要裁剪的值添加到新表允许您
SQL声明
DECLARE @Input VARCHAR(32)
SET @Input = 'Streetsstaverddrad'
DECLARE @Trim TABLE (Value VARCHAR(32))
INSERT INTO @Trim
SELECT 'st'
UNION ALL SELECT 'ave'
UNION ALL SELECT 'rd'
UNION ALL SELECT 'dr'
UNION ALL SELECT 'ad'
WHILE EXISTS (
SELECT *
FROM (
SELECT [Adres] = @Input
) i
INNER JOIN @Trim t ON i.Adres LIKE '%' + t.Value
)
BEGIN
SELECT @Input = SUBSTRING(Adres, 1, LEN(Adres) - LEN(t.Value))
FROM (
SELECT [Adres] = @Input
) i
INNER JOIN @Trim t ON i.Adres LIKE '%' + t.Value
END
SELECT @Input
答案 1 :(得分:0)
在SQL Server 2005中,可以定义一个启用regular expression matching的用户功能。您需要定义一个剥离尾随字符串的函数。与您提到的场景相匹配的RegEx将类似......
\s+(ave|rd|dr|ct)\s*$