2012-11-07 54 views
1

我有這個問題給你。我正在工作一個函數,它具有整個地址在一個字段中。我試圖分開它。我開始研究下面的一個,當我嘗試時遇到困難在拉鍊上工作,我想先測試一下是否有拉鍊,如果是這樣的話,我試圖將它與狀態分開。你可以拜託它嗎?謝謝像往常一樣,我非常感謝你的支持。函數單獨的​​字符串

 declare @var1 varchar(100)='1234 S.Almeda way,Seattle,WA9810'--just an example 
     ,@u int 
     ,@r int 
     ,@var2 varchar(100) 
     ,@var3 varchar(100) 
     ,@Zip varchar(25) 
     ,@var4 varchar(100)=null 
      set @u = charindex(',', @var1) 
      set @var2=rtrim(ltrim(substring(@var1, @u+1, 999))) 
      set @r=CHARINDEX(',',@var2) 
      set @var3=rtrim(ltrim(substring(@var2, @r+1, 999))) 

      --set @var4=RIGHT(@var3,5)--not enough 
      if (len(@var3)>=5 and ISNUMERIC(@var3)=1) 
      set @var4=RIGHT(@var3,5) 
      set rtrim(substring(@var3,1,len(@var3)-5)) 
      else set @var4='' 

回答

1

下面是一些示例代碼,您可以合併到你的

declare @var1 varchar(100)='1234 S.Almeda way,Seattle,WA9810'--just an example 
declare @lastcomma int = len(@var1) - charindex(',', reverse(@var1)+',') 
declare @lastPart varchar(100) = substring(@var1, @lastcomma+2, 100) 
select @lastPart 
declare @zipstart int = patindex('%[0-9]%', @lastpart) 
declare @zip varchar(5) = '' 
if @zipstart > 0 
    select @zip = substring(@lastpart, @zipstart, 5), @lastPart = rtrim(substring(@lastpart,1,@zipstart-1)) 
select @lastpart, @zip 
+0

嗨@RichardTheKiwi,我測試了它,這個邏輯工作的很好。我將和其餘的部分合並並再次測試,如果失敗會通知你。我不認爲它會失敗,但是我再次非常感謝你的優秀答案。謝謝。 –

0

您正在尋找一個拆分函數,它不是內置的SQL Server。

我已經停止閱讀你的代碼,當我看到你給你的變量名(非常糟糕的選擇,它應該有某種含義)

有實現它的方法很多,我來接一個隨機地從谷歌搜索(不,我不以爲恥,我不想推倒重來)

CREATE FUNCTION dbo.Split(@String varchar(8000), @Delimiter char(1))  
returns @temptable TABLE (items varchar(8000))  
as  
begin  
    declare @idx int  
    declare @slice varchar(8000)  

    select @idx = 1  
     if len(@String)<1 or @String is null return  

    while @idx!= 0  
    begin  
     set @idx = charindex(@Delimiter,@String)  
     if @idx!=0  
      set @slice = left(@String,@idx - 1)  
     else  
      set @slice = @String  

     if(len(@slice)>0) 
      insert into @temptable(Items) values(@slice)  

     set @String = right(@String,len(@String) - @idx)  
     if len(@String) = 0 break  
    end 
return  
end 

使用這種方式:

select top 10 * from dbo.split('1234 S.Almeda way,Seattle,WA9810',',') 

它會給你一個結果在列中每一行

來源:http://blog.logiclabz.com/sql-server/split-function-in-sql-server-to-break-comma-separated-strings-into-table.aspx

你會發現很多其他的例子有快速的網絡搜索。 ;)

+0

嗨@托馬斯,謝謝你送我上面function.I檢查了它,它的工作原理great.But這裏的情況,郵政編碼是附加到狀態,它沒有用逗號隔開,那是我面臨的困難之一。BTW var2是城市,var3是狀態,var4是zip。再次我非常感謝... –