Как разбить строку nvarchar (max) внутри SQL - PullRequest
1 голос
/ 21 марта 2011

У меня есть столбец nvarchar (max) с одинаковыми значениями '((A1 ИЛИ A2) И (A4 И A5)) ИЛИ A6)', Мне нужно выбрать из него «А1», «А2», «А4», «А5», «А6».

Как я могу пролить на синтаксис SQL? это возможно?

Ответы [ 2 ]

4 голосов
/ 21 марта 2011

Попробуйте что-то вроде этого.

Пример таблицы

declare @t table (id int identity, str nvarchar(max))
insert @t select '((A1 OR A2) AND (A4 AND A5)) OR A6)'
insert @t select '(A1 OR A2)'

Это разбивает varchar на слова и нумерует их

select id, word,
    row_number() over (partition by id order by number) position
from
(
    select t.id, v.number,
        substring(t.str+')',
                  v.number+1,
                  patindex('%[() ]%',
                           substring(t.str+')',
                                     v.number+1,
                                     1000))-1) word
    from @t t
    inner join master..spt_values v on v.type='P'
      and v.number < len(t.str)
      and (v.number=0 or substring(t.str,v.number,1) like '[() ]')
) x
where word not in ('','OR','AND')

Выходные данные

id   word  position
1    A1    1
1    A2    2
1    A4    3
1    A5    4
1    A6    5
2    A1    1
2    A2    2
1 голос
/ 21 марта 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...