| Author |
Topic |
|
Netgame
Starting Member
4 Posts |
Posted - 2009-09-15 : 14:37:33
|
| Can someone give a hand with this one? I have a two address fields, Addr1 and Addr2, that I am trying to parse out into three new fields, City State Zip.The City State and Zip can be placed in either one of the fields, Addr1 or Addr2. My first step is to write a script that will identify which one of the fields contains the City State and Zip. I think that I can handle that part by having the it look to see which one has a "Space + a two digit State Code".The second part, which I really need help with, will be to parse it out to the three new fields.Here are some of the examples of what the data looks like.Addr15555 COLUSA STREET5555 BUCHANAN STUSA BOX 555USA BOX 555555 PARNASSUS 4TH FL555 52ND STREETSAN FRANCISCO, CA 94143SAN FRANCISCO CA 94143Addr2VALLEJO, CA 94590SAN FRANCISCO CA 94115SAN FRANCISCO, CA 94143SAN FRANCISCO CA 94143SAN FRANCISCO CA 94143OAKLAND CA 9460900 |
|
|
madhivanan
Premature Yak Congratulator
22864 Posts |
Posted - 2009-09-16 : 02:34:44
|
| What is your expected result?MadhivananFailing to plan is Planning to fail |
 |
|
|
sanoj_av
Posting Yak Master
118 Posts |
Posted - 2009-09-16 : 08:04:18
|
| --May not be optimal for Bigger tables as it goes for iterative String manipulationCreate Table Table1(Addr1 varchar(100),Addr2 Varchar(100))Insert into Table1(Addr1,Addr2) Values('5555 COLUSA STREET','VALLEJO, CA 94590')Insert into Table1(Addr1,Addr2) Values('5555 BUCHANAN ST','SAN FRANCISCO CA 94115')Insert into Table1(Addr1,Addr2) Values('USA BOX 555','SAN FRANCISCO, CA 94143')Insert into Table1(Addr1,Addr2) Values('USA BOX 555','SAN FRANCISCO CA 94143')Insert into Table1(Addr1,Addr2) Values('555 PARNASSUS 4TH FL','SAN FRANCISCO CA 94143')Insert into Table1(Addr1,Addr2) Values('555 52ND STREET','OAKLAND CA 94609')Insert into Table1(Addr1,Addr2) Values('SAN FRANCISCO, CA 94143','0')Insert into Table1(Addr1,Addr2) Values('SAN FRANCISCO CA 94143','0')CREATE FUNCTION Get_CityStateZip ( @Addr1 Varchar(100), @Addr2 Varchar(100), @RequiredColumn Varchar(10) )RETURNS VARCHAR(100)ASBEGINDeclare @SearchAddr varchar(100), @EOL Bit, @charPosition int, @WhiteSpace int, @strTemp varchar(100), @StrCity varchar(100), @StrState char(2), @StrZip char(5), @cnt int Set @SearchAddr=@Addr1 Set @cnt =1 While(@cnt<=2) Begin Set @EOL=0 Set @charPosition=1 While(@EOL=0) Begin Set @WhiteSpace=charindex(' ',@SearchAddr,@charPosition) Set @strTemp=substring(@SearchAddr,@charPosition,(CASE WHEN @WhiteSpace > 0 THEN @WhiteSpace-@charPosition ELSE 999 END)) Set @charPosition=@WhiteSpace+1 if @WhiteSpace=0 Set @EOL=1 If LEN(LTRIM(RTRIM(@strTemp)))=2 AND ISNUMERIC(@strTemp)=0 Set @StrState=@strTemp If LEN(LTRIM(RTRIM(@strTemp)))=5 AND ISNUMERIC(@strTemp)=1 Set @StrZip=@strTemp End Select @StrCity=LTRIM(RTRIM(Replace(Replace(@SearchAddr,@StrState,''),@StrZip,''))) If Len(@StrState) > 0 AND Len(@StrZip) > 0 Begin Break End Else Begin Set @SearchAddr=@Addr2 Set @cnt =@cnt+1 End End SELECT @strTemp=CASE @RequiredColumn WHEN 'state'THEN @StrState WHEN 'city' THEN @StrCity WHEN 'zip' THEN @StrZip ELSE NULL END RETURN @strTempENDSELECT dbo.Get_CityStateZip(Addr1,Addr2,'State') AS State, dbo.Get_CityStateZip(Addr1,Addr2,'City') AS City, dbo.Get_CityStateZip(Addr1,Addr2,'Zip') AS ZipFrom Table1 |
 |
|
|
visakh16
Very Important crosS Applying yaK Herder
52326 Posts |
Posted - 2009-09-16 : 13:06:09
|
quote: Originally posted by Netgame Can someone give a hand with this one? I have a two address fields, Addr1 and Addr2, that I am trying to parse out into three new fields, City State Zip.The City State and Zip can be placed in either one of the fields, Addr1 or Addr2. My first step is to write a script that will identify which one of the fields contains the City State and Zip. I think that I can handle that part by having the it look to see which one has a "Space + a two digit State Code".The second part, which I really need help with, will be to parse it out to the three new fields.Here are some of the examples of what the data looks like.Addr15555 COLUSA STREET5555 BUCHANAN STUSA BOX 555USA BOX 555555 PARNASSUS 4TH FL555 52ND STREETSAN FRANCISCO, CA 94143SAN FRANCISCO CA 94143Addr2VALLEJO, CA 94590SAN FRANCISCO CA 94115SAN FRANCISCO, CA 94143SAN FRANCISCO CA 94143SAN FRANCISCO CA 94143OAKLAND CA 9460900
how will you identify statecode? do u have a table with all state codes stored? |
 |
|
|
ddamico
Yak Posting Veteran
76 Posts |
Posted - 2009-09-16 : 13:32:20
|
| DECLARE @StateAbbrev TABLE ( [State] VARCHAR(20), [abb] CHAR(2))INSERT INTO @StateAbbrevSELECT 'Alabama', 'AL' UNIONSELECT 'Alaska', 'AK' UNIONSELECT 'Arizona', 'AZ' UNIONSELECT 'Arkansas', 'AR' UNIONSELECT 'California', 'CA' UNIONSELECT 'Colorado', 'CO' UNIONSELECT 'Connecticut', 'CT' UNIONSELECT 'Delaware', 'DE' UNIONSELECT 'Florida', 'FL' UNIONSELECT 'Georgia', 'GA' UNIONSELECT 'Hawaii', 'HI' UNIONSELECT 'Idaho', 'ID' UNIONSELECT 'Illinois', 'IL' UNIONSELECT 'Indiana', 'IN' UNIONSELECT 'Iowa', 'IA' UNIONSELECT 'Kansas', 'KS' UNIONSELECT 'Kentucky', 'KY' UNIONSELECT 'Louisiana', 'LA' UNIONSELECT 'Maine', 'ME' UNIONSELECT 'Maryland', 'MD' UNIONSELECT 'Massachusetts', 'MA' UNIONSELECT 'Michigan', 'MI' UNIONSELECT 'Minnesota', 'MN' UNIONSELECT 'Mississippi', 'MS' UNIONSELECT 'Missouri', 'MO' UNIONSELECT 'Montana', 'MT' UNIONSELECT 'Nebraska', 'NE' UNIONSELECT 'Nevada', 'NV' UNIONSELECT 'New Hampshire', 'NH' UNIONSELECT 'New Jersey', 'NJ' UNIONSELECT 'New Mexico', 'NM' UNIONSELECT 'New York', 'NY' UNIONSELECT 'North Carolina', 'NC' UNIONSELECT 'North Dakota', 'ND' UNIONSELECT 'Ohio', 'OH' UNIONSELECT 'Oklahoma', 'OK' UNIONSELECT 'Oregon', 'OR' UNIONSELECT 'Pennsylvania', 'PA' UNIONSELECT 'Rhode Island', 'RI' UNIONSELECT 'South Carolina', 'SC' UNIONSELECT 'South Dakota', 'SD' UNIONSELECT 'Tennessee', 'TN' UNIONSELECT 'Texas', 'TX' UNIONSELECT 'Utah', 'UT' UNIONSELECT 'Vermont', 'VT' UNIONSELECT 'Virginia', 'VA' UNIONSELECT 'Washington', 'WA' UNIONSELECT 'West Virginia', 'WV' UNIONSELECT 'Wisconsin', 'WI' UNIONSELECT 'Wyoming', 'WY' DECLARE @Address TABLE ( [id] INT IDENTITY(1,1), [addr1] VARCHAR(255), [addr2] VARCHAR(255), [City] VARCHAR(25), [State] CHAR(2), [Zip] VARCHAR(10))INSERT INTO @Address ( [addr1], [addr2] )SELECT '5555 COLUSA STREET', 'VALLEJO, CA 94590' UNIONSELECT '5555 BUCHANAN ST', 'SAN FRANCISCO CA 94115' UNIONSELECT 'USA BOX 555', 'SAN FRANCISCO, CA 94143' UNIONSELECT 'USA BOX 555', 'SAN FRANCISCO CA 94143' UNIONSELECT '555 PARNASSUS 4TH FL', 'SAN FRANCISCO CA 94143' UNIONSELECT '555 52ND STREET', 'OAKLAND CA 94609' UNIONSELECT 'SAN FRANCISCO, CA 94143', '0' UNIONSELECT 'SAN FRANCISCO CA 94143', '0'UPDATE YSET Y.[City] = Z.[City], Y.[State] = Z.[State], Y.[Zip] = Z.[Zip], Y.[addr1] = CASE WHEN Z.[addrColumn] = 1 THEN '' ELSE Y.[addr1] END, Y.[addr2] = CASE WHEN Z.[addrColumn] = 2 THEN '' ELSE Y.[addr2] ENDFROM @Address YINNER JOIN ( SELECT A.[id] , City = LTRIM(RTRIM(SUBSTRING(A.[addr1], 1, CHARINDEX(SPACE(1) + B.[abb] + SPACE(1) ,A.[addr1])-1))) , [State] = B.[abb] , Zip = SUBSTRING(A.[addr1], CHARINDEX(SPACE(1) + B.[abb] + SPACE(1) , A.[addr1])+4, LEN(A.[addr1]) - CHARINDEX(SPACE(1) + B.[abb] + SPACE(1) , A.[addr1])-1) , AddrColumn = 1 FROM @Address A INNER JOIN @StateAbbrev B ON A.[addr1] LIKE '% ' + B.[abb] + ' %' UNION SELECT A.[id] , City = LTRIM(RTRIM(SUBSTRING(A.[addr2], 1, CHARINDEX(SPACE(1) + B.[abb] + SPACE(1) ,A.[addr2])-1))) , [State] = B.[abb] , Zip = SUBSTRING(A.[addr2], CHARINDEX(SPACE(1) + B.[abb] + SPACE(1) , A.[addr2])+4, LEN(A.[addr2]) - CHARINDEX(SPACE(1) + B.[abb] + SPACE(1) , A.[addr2])-1) , AddrColumn = 2 FROM @Address A INNER JOIN @StateAbbrev B ON A.[addr2] LIKE '% ' + B.[abb] + ' %' ) Z ON Y.[id] = Z.[id]SELECT * FROM @Address |
 |
|
|
|
|
|