2016-11-11 9 views
-4

enter image description hereは、どのようにT-SQL

ID NAME   Address1     Address2 
1 kjp  Station raod anand     NULL 
2 Roma 7000 ny street ny 21075   NULL 
3 rony 5001 oak tree st jessup 21005  NULL 

を使用して、複数のcolumsに1列を分割して、私はトリッキーなことができるのアドレスを解析

ID NAME   Address1  Addres2 postalcode 
1 kjp  Station raod   Anand  NULL 
2 Roma 7000 ny street   ny  21075 
3 rony 5001 oak tree st  jessup 21005 
+1

分割のためのロジックは何ですか?最後のスペース '' ''の後のすべてのものは? –

+2

このタイプのデータ変換には、仕事やキャリアがあります。銀色の弾丸の解決策はなく、IMOはこの情報交換には広すぎます。 – xQbert

+0

@xQbert逆アドレスとジオロケーションフィールドにも入っていますか? –

答えて

1

ような結果たいです。

GOOGLE APIを使用してプロセスを自動化し、アドレスをジオコード化し、JSON結果を解析してより標準化された結果を返すことです。これは時間がかかる可能性がありますが、データに対する信頼性はさらに高くなります。

https://maps.googleapis.com/maps/api/geocode/json?address=1600%20Pennsylvainia%20Ave,%20Washington%20DC 
+0

@Krushit私は、アドレスを解析しようとしないと同意します。あなたのためにそれを行うためにエンジンを解析する! – Matt

+0

これは最良の結果をもたらす可能性が高いと思います。 – xQbert

+0

@xQbert私は同意します。一度基本データを解決したら、毎日の追加を処理するだけで済みます。我々は余分な音量とヒット率を支払うつもりだったが、それは不必要だった。 –

0
  • I findスペースで文字列を分割する機能。
  • REVERSE各文字列の最後の2つの単語を確認します。そして、それは他の[Address2]が賢明[last][last]がある場合[Address2]
  • が確定することができているだろう[beforeLast]を意味
    • [last]が数値の場合、確定することができ[Addres1]
    • から削除どのように多くの文字計算することができます。[last][beforeLast]をチェック
    • 数字を入力すると郵便番号が表示されます。

SQL DEMO

WITH lastToken as (
    SELECT [ID], 
      (SELECT REVERSE(s) 
      FROM dbo.SplitString(REVERSE(Address1), ' ') 
      WHERE zeroBasedOccurance = 0 
      ) as last, 
      (SELECT REVERSE(s) 
      FROM dbo.SplitString(REVERSE(Address1), ' ') 
      WHERE zeroBasedOccurance = 1 
      ) as beforeLast 
    FROM T1 
)  
SELECT T1.ID, T1.Name, 
     LEFT(T1.[Address1], 
      LEN([Address1]) - 
      CASE WHEN ISNUMERIC(last) = 1 
       THEN LEN(last) + LEN(beforeLast) + 2 
       ELSE LEN(last) + 1 
      END 
      ) [Address1], 
     CASE WHEN ISNUMERIC(last) = 1 
      THEN beforeLast 
      ELSE last 
     END as [Address2],  
     CASE WHEN ISNUMERIC(last) = 1 
      THEN last 
     END as [zipcode], 
     T2.*  
FROM T1 
JOIN lastToken T2 
    ON T1.[ID] = T2.[ID]; 

OUTPUT

enter image description here

+0

すべての郵便番号が数字でないことを除いて、5-4表記の場合は、 - またはそうではありません。 – xQbert

+0

@xQbertは5桁の郵便番号を郵送していませんか? –

+0

米国5または5-4カナダの38192-3813(実際の例ではない)は#Z# - #Z#6文字3x3です。それ以外の国でも変化します。 – xQbert

関連する問題