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

Откуда:
Сообщений: 8
Доброго времени суток.
Я совсем зеленый новичок.
Помогите пожалуйста решить следующую проблему.
Есть строка ( тип данных : varchar(max)).
В строке ID через запятую ( '123,15978,4564654,7898456,654.....N')
Необходимо получить столбец:
ID ( тип данных: INT )
123
15978
4564654
7898456
654
...
...
...
N

и результат записать в переменную которая будет обрабатываться в хранимой процедуре
Заранее благодарен
19 июл 13, 18:58    [14591520]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста новичку. Строка в столбец, результаты в переменную  [new]
tanglir
Member

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

читайте отсюда 8434456
20 июл 13, 09:21    [14592838]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста новичку. Строка в столбец, результаты в переменную  [new]
FireFox77
Member

Откуда:
Сообщений: 8
tanglir,
Спасибо.
22 июл 13, 10:18    [14597395]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста новичку. Строка в столбец, результаты в переменную  [new]
FireFox77
Member

Откуда:
Сообщений: 8
Прочитал 8434456 .
Все же немножко не то ( или я что не так понял )

Вот что у меня есть на текущий момент :
----------------------------------------
DECLARE @ID VARCHAR(MAX)
SELECT @ID='26853260,26853261,26853263'

SELECT ID = LEFT(SUBSTRING(@ID,0,(SELECT CHARINDEX(',',@ID))),(SELECT CHARINDEX(',',@ID)))
UNION
SELECT ID=(REPLACE((RIGHT(@ID,(SELECT CHARINDEX(','.@ID)))),',',''))
----------------------------------------
В результате :

ID
1 26853260
2 26853263

А соответственно необходим следующий результат :

ID
1 26853260
2 26853261
3 26853263

Есть еще какие нибудь варианты?
Заранее благодарен
22 июл 13, 14:37    [14599321]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста новичку. Строка в столбец, результаты в переменную  [new]
tanglir
Member

Откуда:
Сообщений: 28966
FireFox77, курить вот это

SELECT *, SUBSTRING_INDEX(SUBSTRING_INDEX(team.users_id, ',',z.x),',',-1) uid
FROM TEAМ
JOIN (SELECT 1 X UNION SELECT 2 UNION SELECT 3) z ON 1=1
и это
javajdbc
P.S. В первом решении размер таблици Z
задает сколько игроков будет выведено.
В примере выводится только 3 игрока. Что бы
вывести всех игроков, размер таблицы Z должен быть
равен [или больше чем] числу игроков в команде.
Значения должны быть последовательность 1,2,3,4,5,6.....
до просветления.


И вообще, CHARINDEX - это функция MSSQL! Вы букву S от буквы Y отличить не можете?
22 июл 13, 14:51    [14599424]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста новичку. Строка в столбец, результаты в переменную  [new]
FireFox77
Member

Откуда:
Сообщений: 8
Пятница вечер... мог и форумом ошибиться. За чем же так громко и сразу на зрение грешить )
Буду дальше гуглить... так как SUBSTRING_INDEX не работает.
22 июл 13, 15:04    [14599508]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста новичку. Строка в столбец, результаты в переменную  [new]
tanglir
Member

Откуда:
Сообщений: 28966
FireFox77
так как SUBSTRING_INDEX не работает.
кэп намекает - это потому, что такой функции в мСскл нет.
22 июл 13, 15:09    [14599546]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста новичку. Строка в столбец, результаты в переменную  [new]
FireFox77
Member

Откуда:
Сообщений: 8
Спасибо кЭп, как бы догадался )
Из примера ( который курить мне нужно ) так же нет : AUTO_INCREMENT ; ENGINE=INNODB...
Вот этот кусок :
INSERT INTO USER(NAME)
SELECT SUBSTRING(MD5(RAND()), -8) FROM
(SELECT 1 a UNION ALL SELECT 2 a UNION ALL SELECT 3 a UNION ALL SELECT 4 a) a,
(SELECT 1 a UNION ALL SELECT 2 a UNION ALL SELECT 3 a UNION ALL SELECT 4 a) b,
(SELECT 1 a UNION ALL SELECT 2 a UNION ALL SELECT 3 a UNION ALL SELECT 4 a) c

Вообще матюгается и не запускается.
22 июл 13, 15:15    [14599592]     Ответить | Цитировать Сообщить модератору
 Re: Помогите пожалуйста новичку. Строка в столбец, результаты в переменную  [new]
tanglir
Member

Откуда:
Сообщений: 28966
FireFox77
Из примера ( который курить мне нужно )
Это я написал ещё до того, как обратил внимание на чариндекс. У вас - три варианта:
  • самому написать свою функцию - аналог субстринг_индекс;
  • или создать аналогичную тему в ГФ;
  • или дождаться, пока эту тему туда перенесут.
  • 22 июл 13, 15:23    [14599651]     Ответить | Цитировать Сообщить модератору
     Re: Помогите пожалуйста новичку. Строка в столбец, результаты в переменную  [new]
    FireFox77
    Member

    Откуда:
    Сообщений: 8
    tanglir
    FireFox77
    Из примера ( который курить мне нужно )
    Это я написал ещё до того, как обратил внимание на чариндекс. У вас - три варианта:
  • самому написать свою функцию - аналог субстринг_индекс;
  • или создать аналогичную тему в ГФ;
  • или дождаться, пока эту тему туда перенесут.


  • Уже попросил модераторов о переносе темы... И вот сижу пытаюсь сделать аналог. На текущий момент все плачевно. Если бы не было с этим проблем, то соответственно не просил бы помощи )

    Модератор: Тема перенесена из форума "MySQL".


    Сообщение было отредактировано: 22 июл 13, 16:25
    22 июл 13, 15:31    [14599704]     Ответить | Цитировать Сообщить модератору
     Re: Помогите пожалуйста новичку. Строка в столбец, результаты в переменную  [new]
    FireFox77
    Member

    Откуда:
    Сообщений: 8
    Люди добрые, в принципе нашел решение :

    declare
    @str varchar(50),
    @sql varchar(1000)
    set @str='1,2,3,4,5'

    select @sql='select '+ replace(@str,',',' union all select ')
    select @sql
    exec(@sql)

    Только подскажите пожалуйста как результат записать в #tmp ?
    Заранее спасибо
    22 июл 13, 16:51    [14600147]     Ответить | Цитировать Сообщить модератору
     Re: Помогите пожалуйста новичку. Строка в столбец, результаты в переменную  [new]
    Гость333
    Member

    Откуда:
    Сообщений: 3683
    FireFox77
    Только подскажите пожалуйста как результат записать в #tmp ?

    В первом посте вы вопрошали о другом:
    FireFox77
    результат записать в переменную которая будет обрабатываться в хранимой процедуре

    Ну так, например, можно:
    insert #tmp(id) -- или @tmp(id)
    exec (@sql)
    
    22 июл 13, 17:11    [14600245]     Ответить | Цитировать Сообщить модератору
     Re: Помогите пожалуйста новичку. Строка в столбец, результаты в переменную  [new]
    FireFox77
    Member

    Откуда:
    Сообщений: 8
    Гость333
    FireFox77
    Только подскажите пожалуйста как результат записать в #tmp ?

    В первом посте вы вопрошали о другом:
    FireFox77
    результат записать в переменную которая будет обрабатываться в хранимой процедуре

    Ну так, например, можно:
    insert #tmp(id) -- или @tmp(id)
    exec (@sql)
    


    В общем да. Спасибо.
    Рабочий вариант ( по крайней мере у меня и вдруг кому пригодится ) :

    create table #t (id int)
    declare
    @str varchar(MAX),
    @sql varchar(MAX)
    set @str='1,2,3,4,5'

    select @sql='select '+ replace(@str,',',' union all select ')
    insert into #t exec(@sql)

    В любом случае спасибо всем
    И отдельная благодарность создателям форума ) буду часто пользоваться
    22 июл 13, 17:49    [14600483]     Ответить | Цитировать Сообщить модератору
    Все форумы / Microsoft SQL Server Ответить