Ошибка при вставке значения в таблицу - PullRequest
0 голосов
/ 05 августа 2011

У меня есть строка, значения которой разделены запятой.Мне нужно вставить отдельное значение, разделенное запятой в таблице.Я написал следующий код, но значения вставляются в таблицу.Может ли кто-нибудь помочь мне найти ошибку в моем коде.

   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 ]

2 голосов
/ 05 августа 2011

Некоторые проблемы:

  • Вам нужно использовать 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 голосов
/ 05 августа 2011

Это должно работать и будет работать, даже если строки не все одиночные символы.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...