Проблема разделения SQL-запросов - PullRequest
0 голосов
/ 31 января 2011

У меня есть строка, предполагающая "ABCDEF" в SQL.

Я хочу показать в следующем формате таблицы: -

A
B
C
D
E
F

Как это сделать без использования CURSOR и т. Д.

Ответы [ 2 ]

0 голосов
/ 31 января 2011

В Sql Server вы можете использовать функцию

  • SUBSTRING, чтобы получить одну букву из строки
  • master..spt_values, чтобы получить предопределенную последовательность чисел (до длины 2047)

Из переменной

declare @str varchar(100) set @str = 'ABCDEF'
select SUBSTRING(@str, number, 1)
from master..spt_values
where type='P' and number between 1 and LEN(@str)
order by number

А если вы разделяете столбец в таблице

create table strtest (id int, str varchar(100))
insert strtest select 1, 'abcdef'
insert strtest select 2, 'qwertyui'

select t.str, v.number, SUBSTRING(t.str, v.number, 1)
from strtest t
inner join master..spt_values v
  on v.type='P' and v.number between 1 and LEN(t.str)
order by t.id, v.number

Если вы используете любую другую СУБД, вы можетесделайте что-то подобное, но создайте таблицу чисел, если она еще не готова.

0 голосов
/ 31 января 2011
with rec(recText, letterno) AS
(
    Select LEFT('ABCDEF',1),
            1
    Union all
    Select Left(RIGHT('ABCDEF',len('ABCDEF') - rec.letterno),1),
            letterno +1
    from rec
    where   rec.letterno < len('ABCDEF')
)
select top 1 STUFF( (   
SELECT ' '+recText FROM rec   FOR XML PATH('') ), 1, 1, '')  FROM rec

Решение t-sql 2008 не знает, удовлетворяет ли это вашему вопросу

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...