1

私はあなたにこの質問があります.私は1つのフィールドにアドレス全体を持つ関数を作業しています.私はそれを分離しようとしています.私は以下の作業を開始しました.最後に最初に zip があるかどうかをテストしたいのですが、そうであれば状態から分離しようとしています。

      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=''
4

2 に答える 2

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
于 2012-11-07T20:13:42.320 に答える
0

組み込みの SQL Server ではない分割関数を探していることは明らかです。

あなたが変数に付けた名前を見たとき、私はあなたのコードを読むのをやめました(本当に悪い選択です、何らかの意味があるはずです)

実装する方法はたくさんあります。Google 検索からランダムに 1 つを選びます (恥ずかしいことではありません。車輪の再発明はしたくありません)。

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

Web をすばやく検索すると、他にも多くの例が見つかります。;)

于 2012-11-07T20:10:45.647 に答える