簡體   English   中英

根據條件拆分字符串,但不拆分單詞,結果應按列顯示

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

我有一個包含 3 個地址(地址 1、地址 2、地址 3、地址 4)的表 如果 LEN (地址 1) < 30,則將字符串的 rest 移動到地址 2 並在地址 2 和地址 3 列中進行相同的檢查。 例如,IF address1='FLAT K 17TH FLOOR NO 100 NUDONG NORTH', address2='ROAD INDIA (MAANGHAI) PILOT FREE TRADE', address3='ZONE THE PRD', address4='ITALY' 來自我的測試 我想要我的解決方案因為 Len(Address1,2,3,4) < 30 並且單詞應該使用空格分隔,而不是介於兩者之間。 address1='FLAT K 17TH FLOOR NO 100', address2='NUDONG NORTH ROAD Italy', address3='(MAANGHAI) PILOT FREE TRADE', address4='ZONE THE PRD ITALY'

我嘗試了 SUBSTRING 和 CHARINDEX,但它在這兩者之間打斷了我的話。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM