简体   繁体   中英

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.

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM