2016-12-27 5 views
1

こんにちはに挿入後、3に1列の分割、最近私が[city, state zip] を含む1列を分割し、その後[city][state][zip]ているだけで、別の列に同じテーブルに挿入しようとしています。列のはテーブル

フォーマットは異なります。[New York, VA 50000]またはそれは[New York, West Virginia 50000-0000]のようなものである可能性があります。これを行う簡単な方法はありますか?私はサブストリングを使用しようとしましたが、私は多くの運がありません!

あなたがparsenameを使用することができます
+0

を使用し、その後、あなたの街や郵便番号を与える第一スペース(逆の結果)までの左の文字列を、逆 ''第一まで残さ市を排除する機能を2回置き換えると、結果をトリミングして、あなたの状態を保ちます。私は誰かが正規表現を思い付くかもしれないと思うけれど、それは速いです。私はそれらに堪能ではありません。 – xQbert

答えて

0

...

declare @a varchar(100) = 'New York, VA 50000' 

select parsename(replace(@a,', ','.'), 2) as [State], parsename(replace(parsename(replace(@a,', ','.'), 1),' ','.'), 1) as ZipCode, parsename(replace(parsename(replace(@a,', ','.'), 1),' ','.'), 2) as City 
+0

私はこのアイデアが気に入っています。私は州とジップの間にカンマがあり、すべてのスペースを置き換えるかどうか確信していません。それらのマルチネーム都市ではうまくいかないでしょう。または状態。残念ながら私はSQL FiddleをSQLサーバーやIdで動作させることができません。エルス – xQbert

+0

我々はhttp://stackoverflow.com/questions/10581772/how-to-split-a-comma-separated-value-to-columns/39376747#39376747を使用して分割を使用する必要がありますし、別の列に追加 –

0

あなたの「国家」の名前は、すべての2文字の略語ではない場合、それは少し難しいだろう。私はこれらの値を最初にREPLACE()を行い、すべてを正規化してから値を分離してみようとします。

のみ5桁はあなたが使用できる長さで郵便番号を取得するには:

substring(fieldname,len(rtrim(fieldname))-5,5) ... WHERE substring(ZipCode,len(rtrim(zipcode))-5,1)!='-' 

次にダッシュ、追加の4桁の数字を持っているもののためにそれを修正する:

substring(ZipCode,len(rtrim(ZipCode))-10,10) ... WHERE substring(ZipCode,len(rtrim(zipcode))-5,1)='-' 

あなたはすることができます同じ長さに設定した後、同じSUBSTRING()を使用して状態を取得します。しかし、それは面倒ですが、それは仕事を完了するでしょう。

0

次のように私はあなたの条件を解決しようとした:

DECLARE @LOCATION TABLE (LOCATION VARCHAR(200)) 
DECLARE @NEW_LOCATION TABLE (CITY VARCHAR(200),STATE VARCHAR(200),ZIP VARCHAR(200)) 

INSERT INTO @LOCATION VALUES('[New York, VA 50000]') 
INSERT INTO @LOCATION VALUES('[New York, West Virginia 50000-0000]') 

INSERT INTO @NEW_LOCATION 
SELECT REPLACE(SUBSTRING(LOCATION,0,CHARINDEX(',',LOCATION)),'[',''), 
     REPLACE(REPLACE(LOCATION,SUBSTRING(LOCATION,0,CHARINDEX(',',LOCATION)+1),''), 
       REVERSE(SUBSTRING(REVERSE(LOCATION),0,CHARINDEX(' ',REVERSE(LOCATION)))),''), 
     REPLACE(REVERSE(SUBSTRING(REVERSE(LOCATION),0,CHARINDEX(' ',REVERSE(LOCATION)))),']','') 
     FROM @LOCATION 

SELECT * FROM @NEW_LOCATION