2011-08-05 11 views
0

値がコンマで区切られた文字列があります。 コンマで区切られた個別の値をテーブルに挿入する必要があります。 次のコードを記述しましたが、値がテーブルに挿入されています。 私のコードで誰かがミスマッチを見つけるのを助けることができます。テーブルに値を挿入する際にエラーが発生しました

declare @str varchar(25) 
    set @str = 'a,b,c' 
    Create table #Qw(parts varchar(25)) 
    while(patindex(',',@str)>0) 
    begin  
     insert into #Qw values(substring(@str,1,1)) 
    end 
    select * from #Qw 
+2

どのようなエラーが表示されますか? – Oded

+0

@Oded:結果は空です(0行)。 'patindex'はマッチしないので、ループに入りません。 – Guffa

+0

@ Guffa - OPに自分の質問と問題の説明を考えさせようとしています。 – Oded

答えて

2

いくつかの問題:

  • あなたはcharindex代わりのpatindexを使用する必要があります。
  • ループ内の文字列を変更する必要があります。終了しないでください。
  • カンマのインデックスを使用して部分文字列を取得する必要があります。そうでない場合は、単一文字項目に対してのみ機能します。

declare @str varchar(25) 
set @str = 'a,b,c' 

create table #Qw (parts varchar(25)) 

while (charindex(',', @str) > 0) begin 
    -- get first part of the string up to the first comma 
    insert into #Qw values(substring(@str, 1, charindex(',', @str) - 1)) 
    -- remove first part of the string including the comma 
    set @str = substring(@str, charindex(',', @str) + 1, 100) 
end 

-- insert the last item from the string 
insert into #Qw values(@str) 

select * from #Qw 

結果:

+-------+ 
| parts | 
+-------+ 
| a  | 
| b  | 
| c  | 
+-------+ 
+0

私はGuffaを手に入れました。 – Shine

0

これは動作するはずですし、まだ文字列はすべて、単一の文字がない場合でも動作します。

DECLARE @str varchar(25) 
DECLARE @Pos int 

SET @str = 'a,b,c' 

Create table #Qw(parts varchar(25)) 

WHILE(CHARINDEX(',',@str)>0) 
BEGIN 
    PRINT LEFT(@str,CHARINDEX(',',@str)-1) 

    INSERT INTO #Qw(parts) VALUES(LEFT(@str,CHARINDEX(',',@str)-1)) 
    SET @str = RIGHT(@str,LEN(@str) - CHARINDEX(',',@str)) 
END 

INSERT INTO #Qw(parts) VALUES(@str) 

SELECT * FROM #Qw 
関連する問題