BhuvanaFelix
BhuvanaFelix

Reputation: 1

Split the String on condition based, but not splitting the word and result should appear in column wise

I have a table which has 3 addresses (address1, address2, address3, address4) If LEN (address1) < 30 then move the rest of the string to address2 and do same check in address2 and address3 columns. For example, IF address1='FLAT K 17TH FLOOR NO 100 NUDONG NORTH', address2='ROAD INDIA (MAANGHAI) PILOT FREE TRADE', address3='ZONE THE PRD', address4='ITALY' from my testable I want my solution as Len(Address1,2,3,4) < 30 and words should be separated using space and not in between. address1='FLAT K 17TH FLOOR NO 100', address2='NUDONG NORTH ROAD Italy', address3='(MAANGHAI) PILOT FREE TRADE', address4='ZONE THE PRD ITALY'

I tried SUBSTRING and CHARINDEX, but it is cutting my words in between.

Upvotes: 0

Views: 25

Answers (1)

BhuvanaFelix
BhuvanaFelix

Reputation: 1

After a long try, find this solution to separate the address with each column with length of 30 and not splitting the word. There may be many easy other solutions, If anyone have other solutions, please feel free to share


DECLARE @Address1 VARCHAR(MAX)
DECLARE @TempAddress2 VARCHAR(MAX)
DECLARE @TempAddress3 VARCHAR(MAX)
DECLARE @Address2 VARCHAR(MAX)
DECLARE @Address3 VARCHAR(MAX)
DECLARE @Address4 VARCHAR(MAX)
SET @Address1 ='FLAT K 17TH FLOOR NO 100 NUDONG NORTH'
SET @Address2 = 'ROAD INDIA (MAANGHAI) PILOT FREE TRADE'
SET @Address3 = 'ZONE THE PRD'
SET @Address4 = 'ITALY'
SET @TempAddress2 = SUBSTRING(@Address1,LEN(REVERSE(SUBSTRING(REVERSE(LEFT( @Address1, 30)),CHARINDEX(' ',REVERSE(LEFT( @Address1, 30))),30)))+2,LEN(@Address1))  +' '+ @Address2
SET @TempAddress3 = SUBSTRING(@TempAddress2 + ' ' + @Address3,LEN(REVERSE(SUBSTRING(REVERSE(LEFT( @TempAddress2 + ' ' + @Address3, 30)),CHARINDEX(' ',REVERSE(LEFT( @TempAddress2 + ' ' + @Address3, 30))),30)))+2,LEN(@TempAddress2 + ' ' + @Address3))

SELECT REVERSE(SUBSTRING(REVERSE(LEFT(@Address1, 30)),CHARINDEX(' ',REVERSE(LEFT(@Address1, 30))),30))  AS Address1
      ,SUBSTRING(@Address1,LEN(REVERSE(SUBSTRING(REVERSE(LEFT( @Address1, 30)),CHARINDEX(' ',REVERSE(LEFT( @Address1, 30))),30)))+2,LEN(@Address1)) as Left_Address1
      ,REVERSE(SUBSTRING(REVERSE(LEFT( @TempAddress2, 30)),CHARINDEX(' ',REVERSE(LEFT( @TempAddress2, 30))),30))  AS Address2
      , SUBSTRING(@TempAddress2,LEN(REVERSE(SUBSTRING(REVERSE(LEFT( @TempAddress2, 30)),CHARINDEX(' ',REVERSE(LEFT( @TempAddress2, 30))),30)))+2,LEN(@TempAddress2)) as Address3
      , SUBSTRING(@TempAddress3,LEN(REVERSE(SUBSTRING(REVERSE(LEFT( @TempAddress3, 30)),CHARINDEX(' ',REVERSE(LEFT( @TempAddress3, 30))),30)))+2,LEN(@TempAddress3)) as Address4

Upvotes: 0

Related Questions