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

Откуда:
Сообщений: 9
DECLARE @tags NVARCHAR(400) = 'clothing,road,,touring,bike'

SELECT value
FROM STRING_SPLIT(@tags, ',')
WHERE RTRIM(value) <> '';


Добрый день, подскажите пожалуйста, как мне обращаться к полям таблицы value, которая создается после выполнение данного запроса? например в переменную записать данные из второй строки.
26 окт 19, 01:01    [22003087]     Ответить | Цитировать Сообщить модератору
 Re: парсинг строк  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
DECLARE @tags NVARCHAR(400) = 'clothing,road,,touring,bike'

;with t as(
SELECT value
,row_number() over(order by 1/0) n
FROM STRING_SPLIT(@tags, ',')
WHERE RTRIM(value) <> ''
)
select value from t where n=2 
26 окт 19, 01:30    [22003090]     Ответить | Цитировать Сообщить модератору
 Re: парсинг строк  [new]
sqlfool
Member

Откуда:
Сообщений: 9
3unknown,

да, но остается вопрос как в переменную записать данные, когда я делаю так:


DECLARE @tags NVARCHAR(400) = @string;

with t as(
SELECT value
,row_number() over(order by 1/0) n
FROM STRING_SPLIT(@tags, '')
WHERE RTRIM(value) <> ''
)

declare @data varchar(50);
set @data = (select value from t where n =2)

выдает ошибку.
26 окт 19, 02:33    [22003093]     Ответить | Цитировать Сообщить модератору
 Re: парсинг строк  [new]
3unknown
Member

Откуда: New York
Сообщений: 140
DECLARE @tags NVARCHAR(400) = 'clothing,road,,touring,bike'
declare @data varchar(50);

;with t as(
SELECT value
,row_number() over(order by 1/0) n
FROM STRING_SPLIT(@tags, ',')
WHERE RTRIM(value) <> ''
)
select @data = value from t where n=2 

print @data
26 окт 19, 02:39    [22003094]     Ответить | Цитировать Сообщить модератору
 Re: парсинг строк  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31355
sqlfool
когда я делаю так:
with t as(
SELECT value
,row_number() over(order by 1/0) n
FROM STRING_SPLIT(@tags, '')
WHERE RTRIM(value) <> ''
)
declare @data varchar(50);
set @data = (select value from t where n =2)


with (то есть CTE) - это не определение какого то имени, это часть запроса.

Написать declare между with и set - это то же самое, что написать declare между FROM и WHERE
26 окт 19, 17:48    [22003270]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить