我有这个问题。我正在使用一个函数,它在一个字段中有整个地址。我正在尝试将它分开。我已经开始处理下面的那个了,当我尝试工作时我遇到了困难拉链,我想测试一下最后是否有拉链,如果是的话我试图将它与州分开。你能不能对它好吗?非常感谢你们,我感谢你的支持..
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=''
答案 0 :(得分: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
答案 1 :(得分: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',',')
它会为您提供一行,每行都有一个结果
您可以通过快速网络搜索找到许多其他示例。 ;)