2010-12-08 77 views
1

我有一個函數來規範地址。我現在想要做的是刪除有限的指定列表中的任何字符串,如果它們出現在字符串的末尾。假設我想刪除的字符串是'st','ave','rd','dr','ct'...如果字符串以任何這些字符串結尾,我想刪除它們。使用T-SQL實現這一點的最佳方法是什麼(這將使不是成爲select語句的一部分)?什麼是在字符串末尾移除子字符串的最簡單/最好的方法?

編輯:

這是接受一個地址和格式,它的功能。我想以最簡單的方式將代碼和列表內聯。例如,我一直玩的一些代碼是:

if @address LIKE '%st' 
SET @address = substring(@address, 1, PatIndex('%st', @address) - 1) 

這是一個好方法嗎?我怎樣才能把它放在某種循環中,這樣我就可以用不同的值(除了st)重複這段代碼?

回答

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 
+0

這是在同一時間接受一個地址,其標準化的功能......沒有「地址」表 – froadie 2010-12-08 10:06:58

0

在SQL Server 2005中,它是可能的以定義一個啓用regular expression matching的用戶功能。您將需要定義一個刪除尾隨字符串的函數。匹配你提到的情況下正則表達式會是這樣的......

\s+(ave|rd|dr|ct)\s*$ 
相關問題