2012-07-23 71 views
1

我有一列由地址組成,如下所示。SSIS拆分字符串地址

地址

  • 1裏德街,曼徹斯特,M1 2DF
  • 12鎮路,倫敦,E12,2FH
  • 15瓊斯街,紐卡斯爾,紐卡斯爾&磨損,NE1 3DN

etc .. etc ...

我想分裂成不同的列以impo rt到我的SQL數據庫。我一直在試圖用查找字符串來分隔逗號,但當某些地址比其他地址有更多的「部分」時遇到麻煩。任何想法什麼是最好的方式去做這件事?

許多THANKs

+0

什麼是/你的數據源?根據不同的情況,在將地址分解成SSIS – cfrag 2012-07-23 08:47:44

+0

之前,我可能會比較容易分割地址。它來自excel,所以如果需要的話,可以分成若干列,只是試圖在同一時間使SSIS中的所有其他進程發生變化。 – user1486198 2012-07-23 09:30:15

+0

如果可能的話,就像看起來那樣,將處理保留在excel中。處理空列比在SSIS上進行這種分割更容易。也就是說,這仍然是可能的,但爲了這麼簡單的任務,你會得到一個相當大的數據流。 – cfrag 2012-07-23 13:59:23

回答

1

這是一個需求規格問題,而不是實施問題。您可以承擔的地址格式越多,您就可以執行更詳細的解析;同一個硬幣的另一面是,你認爲地址結構越少,你就會被指責的錯誤分析越少。

確定您是否只需處理英國郵政電子郵件或是否可能發生全球地址至關重要。

根據您的示例,地址的某些部分似乎總是存在,但請檢查this resource以確定它們是否真的在所有英國電子郵件地址中都是必需的。

如果您發現需要的解析深度與您可以安全地進行的假設之間存在匹配,則應該能夠通過逗號索引(FINDSTRING)保持解析;確定一些從左邊開始的組件,有些從字符串的右側開始;並保留所有尚未解決的問題。

也可能發生的情況是,你會發現你目前的任務是不可能完成的任務,尤其是與國際郵政地址相關的任務。這就是爲什麼大多數網站和其他數據收集器都需要用戶輸入已經解析過的郵政地址。

1

Hanika提出的優秀點。您的一些解析將取決於您的目標目標是什麼樣子。作爲一個無知的抽出,基於Hanika的鏈接,我會想你的輸出會看起來像

  • 收件人
  • 組織
  • BuildingName
  • BuildingAddress
  • 局部性
  • PostTown
  • 郵政編碼
  • BasicsMet(布爾值,指示是否有最低標準一個地址已被符合。)
    • 在美國,只是因爲地址不能正確CASS ed並不意味着它不能交付 - cip,我的祖父舅舅住在足夠的小鎮,指定他們的名字和城市是足以交付當地郵政官員知道他們是誰。不過,對於批量郵件而言,他們的地址不符合批量郵寄速率,並且會默認爲頭等郵件。我想類似的情況存在於英國的郵件

的總體思路是流經每一行,你要做到最好了解析數據到這些桶。獲得「正確」的最佳解決方案是更改數據輸入方法以驗證數據並將其捕獲到這些離散桶中。由於最佳的情況決不會發生,因此您的任務就是排序糟粕以找到您的黃金。

雖然你可以用FINDSTRING寫出一些很棒的表情,但在這種情況下,我建議不要這樣做,因爲維護本身會讓你發瘋。相反,添加腳本轉換並在.NET(vb或c#)中構建解析邏輯。然後會有一個通過你的轉換運行數據的週期,並讓人眼球看到結果。如果您發現新的場景,則返回並調整業務規則。這很醜陋,它是迭代的,很容易產生人類不會有的結果。

替代滾動您的地址標準化邏輯

  • 買它。最終,您的業務需求超出了應對不斷變化的業務規則的能力。有很多供應商,但我只熟悉美國的
  • 升級到SQL Server 2012以使用DQS(數據質量服務)。您可能仍然需要購買產品來構建知識庫,但是您可以將業務規則制定任務卸給域專家(「嘿,你,你花了一個小時做花生,確保所有地址都是從這個角度出來的像地址「是他們在我的一份工作開始時如何報道的)。