Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 как оптимальней  [new]
из строки в столбец
Guest
SQL 2005
Как оптимальней из строки (varchar) со значениями, разделенными запятыми

'-014,-032,-094,-009,-004,-080,-013,-015,-019,-014,-032,-094,-009,-024,-058,-042,
-044,-139,-062,-012,-034,-006,-012,-034,-006,-012,-006,-157,-047,-053'

получить столбец?
30 сен 09, 15:49    [7725440]     Ответить | Цитировать Сообщить модератору
 Re: как оптимальней  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
массивы и списки в SQL Server
30 сен 09, 15:51    [7725445]     Ответить | Цитировать Сообщить модератору
 Re: как оптимальней  [new]
aleks2
Guest
Во...

alter function f_StrToTable(@str varchar(8000), @delimiter char(1)=',')
returns table as
return(
WITH str_nums ( n1, n2, Number ) 
AS 
( 
select  0 as n1, charindex(@delimiter, @str+@delimiter) as n2, 0 as Number  
UNION ALL 
select n2 as n1, charindex(@delimiter, @str+@delimiter, n2+1) as n2, Number+1 as Number
from str_nums
WHERE n2<len(@str)
) 
SELECT SUBSTRING(@str, n1+1, n2-n1-1) Value, Number, n1+1 as StartPosition FROM str_nums
)
30 сен 09, 16:22    [7725694]     Ответить | Цитировать Сообщить модератору
 Re: как оптимальней  [new]
из строки в столбец
Guest
я вчера прежде чем опубликовать, сделал вот так

drop table ##tmp

declare @cfo varchar(2000), @sql varchar(max)

select @cfo='-014,-032,-094,-009,-004,-080,-013,-015,-019,
-014,-032,-094,-009,-024,-058,-042,-044,-139,-062,-012,-034,
-006,-012,-034,-006,-012,-006,-157,-047,-053'

select @sql='select null as text into ##tmp 
union select '+char(39)+replace(@cfo, ',',  char(39)+
' union select '+char(39))+char(39)

exec (@sql)
select * from ##tmp

думал, что есть более "правильное" решение, но раз и Паганель дал ссылку, по которой можно найти аналогичное решение, и aleks2 дал в принципе такое же - остановлючь на нем. спасибо!
1 окт 09, 06:57    [7727846]     Ответить | Цитировать Сообщить модератору
 Re: как оптимальней  [new]
aleks2
Guest
из строки в столбец
я вчера прежде чем опубликовать, сделал вот так

drop table ##tmp

declare @cfo varchar(2000), @sql varchar(max)

select @cfo='-014,-032,-094,-009,-004,-080,-013,-015,-019,
-014,-032,-094,-009,-024,-058,-042,-044,-139,-062,-012,-034,
-006,-012,-034,-006,-012,-006,-157,-047,-053'

select @sql='select null as text into ##tmp 
union select '+char(39)+replace(@cfo, ',',  char(39)+
' union select '+char(39))+char(39)

exec (@sql)
select * from ##tmp


Так делать можно, но НЕ НУЖНО. Есть такая страшилка "sql injection"...
1 окт 09, 07:58    [7727873]     Ответить | Цитировать Сообщить модератору
 Re: как оптимальней  [new]
aleks2
Guest
из строки в столбец
Паганель дал ссылку, по которой можно найти аналогичное решение, и
aleks2 дал в принципе такое же - остановлючь на нем. спасибо!


Ну тока брехать не нада - нету там (Паганель дал ссылку) такого решения - это старая статья (до эпохи MS SQL 2005).
1 окт 09, 08:02    [7727876]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить