2012-11-07 17 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。再次我非常感谢... –