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

Откуда:
Сообщений: 2
Помогите пожплуйста решить проблему для SQL Server 2005 . Есть строка в таблице которую нужно разбить на слова, слова разделены пробелом, но при этом необходтимо еще всталять значение второй колонки.
Есть таблица состоящая из двух столбцов(код и значение):
код | Значение
________________
код1 |Значение11 Значение12 Значение13
код2 |Значение21 значение22 Значение23

Значения написаны через пробел.

Небходимо получить таблицу:
код |Значение
________________
код1 |Значение11
код1 |Значение12
код1 |Значение13
код2 |Значение21
код2 |Значение22
код2 |Значение23

Помогите, заранее спаибо!
22 окт 11, 10:33    [11482904]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки из таблицы  [new]
Sekoka
Member

Откуда:
Сообщений: 73
Незнаю, подойдет тебе курсор или нет.

CREATE TABLE [TAB](
	[KOD] [nvarchar](50) NULL,
	[Znac] [nvarchar](50) NULL)

DECLARE @KOD as nvarchar(10),@zn1 as nvarchar(100)

DECLARE cur CURSOR DYNAMIC SCROLL READ_ONLY FOR
SELECT [KOD]
      ,[Znac]
FROM [Table_2]
OPEN cur
FETCH FIRST FROM cur into @KOD,@zn1
WHILE (@@FETCH_STATUS=0)
BEGIN
WHILE (CHARINDEX(' ',@zn1)<>0)
BEGIN
INSERT INTO TAB ([KOD],[Znac])
SELECT @KOD
      ,left(@zn1,CHARINDEX(' ',@zn1)-1)
SET @zn1=right(@zn1,len(@zn1)-CHARINDEX(' ',@zn1))
END
INSERT INTO TAB ([KOD],[Znac])
SELECT @KOD
      ,@zn1
FETCH NEXT FROM cur into @KOD,@zn1
END
CLOSE cur
DEALLOCATE cur

SELECT [KOD]
      ,[Znac]
  FROM [TAB]
  
DROP TABLE TAB
22 окт 11, 11:51    [11482979]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки из таблицы  [new]
iap
Member

Откуда: Москва
Сообщений: 47061
Sekoka,

какой-такой курсор-мурсор?!

https://www.sql.ru/forum/actualthread.aspx?tid=847500&pg=1&mid=10589208#10589208
SELECT T.[KOD], P.S
FROM TAB T CROSS APPLY dbo.ParseString(T.[Znac],' ') P;
22 окт 11, 12:25    [11483014]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки из таблицы  [new]
ё
Guest
declare @t table (code varchar(4), value varchar(100))

insert into @t

select 'код1', 'Значение11 Значение12 Значение13' union all
select 'код2', 'Значение21 значение22 Значение23 Значение24'

;with 
d as (select 1 as dig union all select dig+1 from d where dig<100),
s as (
select code, 0 as dig from @t
union all
select code, dig
from @t cross join d
where substring(value, dig, 1)=' '
  and len(value)>=dig
)

select t.code, 
substring(value, s.dig+1, case when charindex(' ', value, s.dig+1)=0 then len(value)-s.dig else charindex(' ', value, s.dig+1)-(s.dig+1) end) as new_value
from @t t 
inner join s 
  on t.code=s.code
order by 1, 2
code new_value
---- -----------------
код1 Значение11
код1 Значение12
код1 Значение13
код2 Значение21
код2 значение22
код2 Значение23
код2 Значение24
22 окт 11, 12:48    [11483031]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки из таблицы  [new]
Рунец Мария
Member

Откуда:
Сообщений: 2
Спасибо всем огромное!!! Очень очень рада за помощь. Проблема решена!
Спасибо!
24 окт 11, 07:45    [11486823]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки из таблицы  [new]
мимо
Guest
взгруснулось:
declare @t table (code varchar(4), value varchar(100))

insert into @t

select 'код1', 'Значение11 Значение12 Значение13' union all
select 'код2', 'Значение21 значение22 Значение23 Значение24'

;with a as 
	(
	select code
			,cast('<b>' + replace(value,' ','</b><b>') + '</b>' as XML) as value
	from @t		
			
	)
select code
		, d
from a	
	cross apply (select b.x.value('.','varchar(100)' ) as d
					from a.value.nodes('b') as b(x) ) as y


24 окт 11, 11:34    [11487550]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки из таблицы  [new]
32sasha
Member

Откуда:
Сообщений: 503
А как решить эту задачу для sql 2000 sp3 ?
24 апр 12, 18:57    [12465231]     Ответить | Цитировать Сообщить модератору
 Re: Парсинг строки из таблицы  [new]
aleks2
Guest
CREATE FUNCTION [dbo].[f_StrToTableEx] (@str varchar(7998), @delimiter char(1)=',') RETURNS TABLE AS
   RETURN(SELECT 
                    substring(@delimiter + @str + @delimiter, Number + 1, charindex(@delimiter, @delimiter + @str + @delimiter, Number + 1) - Number - 1) AS Value
                  , Number
          FROM   dbo.Numbers
          WHERE  
                Number > 0
                AND 
                Number <= len(@delimiter + @str + @delimiter) - 1
                AND  
                substring(@delimiter + @str + @delimiter, Number, 1) = @delimiter)



ЗЫ. таблицу натуральных чисел dbo.Numbers состряпайте сами
24 апр 12, 20:55    [12465779]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Парсинг строки из таблицы  [new]
Двоичник
Member

Откуда: Бобруйск
Сообщений: 330
declare @t table (id int identity, val varchar(50))
declare @val varchar(50)

declare @string varchar(500) = '1-MQW85;1214184;1214185;121418;1-MQW89'+';'

while len(@string) > 0
begin

insert into @t
select substring(@string, 1, charindex(';', @string, 1)-1)

set @string = substring(@string, charindex(';', @string, 1)+1, len(@string))

end

select * from @t
4 сен 14, 16:11    [16535925]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить