2011-12-14 3 views
1

У меня есть строкаРазбивает строку на три переменные в SQL Server 2005

declare @s varchar(100), 
set @s='aaaa,bbbb,cccc' 

declare @first varchar(100), 
declare @second varchar(100), 
declare @third varchar(100) 

Теперь мне нужно разделить эти строки на три переменной холдинга есть ценности, как этот

@first=aaaa 
@second=bbbb 
@third=cccc 

Если я использую сплит-функции, тогда я получаю такой вывод

aaaa 
bbbb 
cccc 

Есть ли лучший способ добиться этого разрешения ии? Любая помощь будет оценена по достоинству.

Я хочу, чтобы этот результат в переменную, потому что это нужно для дальнейшей обработки

Благодаря

+0

http://stackoverflow.com/questions/2647/split-string-in-sql может быть полезным – devdigital

ответ

1

Если функция разделения вы используете возвращают три значения в таблице, один из вариантов может быть использовать этот выход для вставки в табличном переменный с целочисленной идентичностью, а затем выбрать, какие переменные пары, с которыми значение идентификатора:

DECLARE @first VARCHAR(100) 
DECLARE @second VARCHAR(100) 
DECLARE @third VARCHAR(100) 

declare @split_output table (block varchar(100)) 

declare @split_identity table (in_order int identity(1,1), block varchar(100)) 


/* recreate output of split fn */ 
insert into @split_output 
select 'aaaa' 
union 
select 'bbbb' 
union 
select 'cccc' 

select * from @split_output 


/* push split output into table with identity column */ 
insert into @split_identity (block) 
select block from @split_output 

select * from @split_identity 


/* Use identity value to pick which row of the table goes with which variable */ 
set @first = (select block from @split_identity where in_order = 1) 
set @second = (select block from @split_identity where in_order = 2) 
set @third = (select block from @split_identity where in_order = 3) 

select @first, @second, @third 
3

Вот быстрый и грязный хак, если предположить, что ваши входные строки всегда следуют этому формату.

DECLARE @s VARCHAR(100) 
SET @s = 'aaaa,bbbb,cccc' 


DECLARE @first VARCHAR(100) 
DECLARE @second VARCHAR(100) 
DECLARE @third VARCHAR(100) 

SET @s = '<row>' + REPLACE(@s, ',', '</row><row>') + '</row>' 

SELECT @first = CONVERT(XML, @s).value('(/row)[1]', 'varchar(100)') 
     , @second = CONVERT(XML, @s).value('(/row)[2]', 'varchar(100)') 
     , @third = CONVERT(XML, @s).value('(/row)[3]', 'varchar(100)') 
SELECT @first 
     , @second 
     , @third 
+0

Это будет работать только фи ne, если строки не содержат символов '&' или '<'. –

0
declare @s varchar(100) 
set @s='aaaa,bbbb,cccc' 

declare @first varchar(100) 
declare @second varchar(100) 
declare @third varchar(100) 

select @first = left(@s, T.C1-1), 
     @second = substring(@s, T.C1+1, T.C2-T.C1), 
     @third = stuff(@s, 1, T.C2+1, '') 
from (select charindex(',', @s), 
      len(@s)-charindex(',', reverse(@s))) as T(C1, C2) 

String Functions (Transact-SQL)

Смежные вопросы