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

Откуда:
Сообщений: 22
Здравствуйте... есть строка, например : "{1}{4}{6}{7}"

как вывести 1 , 4 , 6, 7 только в разных столбцах?

Заранее спасибо
15 мар 13, 17:05    [14054104]     Ответить | Цитировать Сообщить модератору
 Re: Split by two chars  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
количество столбцов какое должно быть?
15 мар 13, 17:08    [14054131]     Ответить | Цитировать Сообщить модератору
 Re: Split by two chars  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37069
Сначала распарсить в рекодсет, потом его пивотнуть.
15 мар 13, 17:09    [14054137]     Ответить | Цитировать Сообщить модератору
 Re: Split by two chars  [new]
progproger
Member

Откуда:
Сообщений: 22
Паганель,

4...


DECLARE @Str NVARCHAR(MAX)
SET @Str = '1^4^7^6^'
DECLARE @Part NVARCHAR(MAX)
DECLARE @IND INT
SET @IND = CHARINDEX('{',@Str)
DECLARE @EIND INT set @EIND = 0
WHILE(@IND != LEN(@STR))
BEGIN
SET @EIND = ISNULL(((CHARINDEX('^', @Str, @IND + 1)) - @IND - 1), 0)
SELECT (SUBSTRING(@Str, (@IND + 1), @EIND))
SELECT @IND = ISNULL(CHARINDEX('^', @STR, @IND + 1), 0)
END


вот код который выводит по одному символу... нужен такой же вывод только по "{int}{int}{int}" и т.д.
15 мар 13, 17:13    [14054174]     Ответить | Цитировать Сообщить модератору
 Re: Split by two chars  [new]
Гость333
Member

Откуда:
Сообщений: 3683
progproger,

Ваш код выводит не 4 столбца, а 4 набора данных по одному столбцу и одной строке в каждом. Определитесь, что именно вам нужно.
15 мар 13, 17:38    [14054365]     Ответить | Цитировать Сообщить модератору
 Re: Split by two chars  [new]
progproger
Member

Откуда:
Сообщений: 22
Гость333,

Извиняюсь, 4 набора данных по одному столбцу...Мне просто надо пойтись по этим данным и заенсертить
15 мар 13, 17:40    [14054388]     Ответить | Цитировать Сообщить модератору
 Re: Split by two chars  [new]
progproger
Member

Откуда:
Сообщений: 22
Нашел... спасибо за внимание))

Если кому нибудь понадобится то вот код:

DECLARE @v VARCHAR(1000)
SET @v = '{3}{4}{6}{8}'

CREATE TABLE #temp
(
v NVARCHAR(1000)
)

DECLARE @Firstindex INT
DECLARE @Secondindex INT

DECLARE @subval VARCHAR(100)

SET @Firstindex = CHARINDEX('{', @v, 1)
WHILE (@Firstindex <> 0)
BEGIN
SET @Firstindex = CHARINDEX('{', @v, @Firstindex)

IF (@Firstindex = 0)
BREAK

SET @Secondindex = CHARINDEX('}', @v, @Firstindex)

IF (@Secondindex = 0)
BREAK;
IF (@Firstindex + 1 <> @Secondindex)
BEGIN
SET @subval = SUBSTRING(@v, @Firstindex + 1, (@Secondindex - 1) -(@Firstindex))
SELECT @subval AS TagID
INSERT INTO #temp
VALUES
(
@subval
)
END

SET @Firstindex = @Secondindex
END
DROP TABLE #temp
15 мар 13, 17:49    [14054453]     Ответить | Цитировать Сообщить модератору
 Re: Split by two chars  [new]
Паганель
Member

Откуда: Винница
Сообщений: 22552
declare @t table(w nvarchar(max), r int identity)
insert into @t(w)
select vv.value('.', 'nvarchar(max)')
  from (select cast(replace(replace('{1}{4}{6}{7}', '{', '<r>'), '}', '</r>') as xml) as v) as t
 cross apply t.v.nodes('/r') as tt(vv)

select w from @t where r = 1
select w from @t where r = 2
select w from @t where r = 3
select w from @t where r = 4
минусы, думаю, понятны
15 мар 13, 17:50    [14054465]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить