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

Откуда: Москва
Сообщений: 2554
Всем доброго дня,

Помогите, пожалуйста, каким запросом можно строку вида

Значение1,Значение2,Значение3,Значение4

Преобразовать к виду:

Значение1
Значение2
Значение3
Значение4

Разделителем выступает запятая. Еще одно замечание. После запятой в ряде случаев может быть пробел.
7 ноя 16, 16:52    [19866653]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос на преобразование строки в столбец значений  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6794
Lexa_V,

гугл
7 ноя 16, 16:55    [19866673]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос на преобразование строки в столбец значений  [new]
iap
Member

Откуда: Москва
Сообщений: 46951
Lexa_V,

в последнее время модно стало делать это с помощью XML (поиск).
А можно и по-старинке: Функция, которая делит строку на слова
И в местном FAQ, по-моему, есть.
7 ноя 16, 16:58    [19866687]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос на преобразование строки в столбец значений  [new]
Lexa_V
Member

Откуда: Москва
Сообщений: 2554
Понял, спасибо! Иду учить матчасть.
7 ноя 16, 17:02    [19866711]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос на преобразование строки в столбец значений  [new]
Lexa_V
Member

Откуда: Москва
Сообщений: 2554
iap, взял твой пример запроса! Все отлично работает. Спасибо тебе камрад большое.
7 ноя 16, 17:34    [19866816]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос на преобразование строки в столбец значений  [new]
Sybex
Member

Откуда: Moscow
Сообщений: 109
На всякий случай скажу, что в SQL Server 2016 появилась функция STRING_SPLIT
8 ноя 16, 10:42    [19869099]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос на преобразование строки в столбец значений  [new]
Ennor Tiegael
Member

Откуда:
Сообщений: 3141
Sybex
На всякий случай скажу, что в SQL Server 2016 появилась функция STRING_SPLIT
Хреновая функция. Она не возвращает позицию подстроки в исходной строке, только список самих подстрок.

Как можно было об этом не подумать, я не понимаю.
8 ноя 16, 10:53    [19869160]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос на преобразование строки в столбец значений  [new]
Kast2K
Member

Откуда: Санкт-Петербург
Сообщений: 499
Коллеги,

автор
Хреновая функция. Она не возвращает позицию подстроки в исходной строке, только список самих подстрок.


имеет ли право на жизнь такое решение или оно будет работать нестабильно?

select 
ROW_NUMBER() over (order by getdate()) as rn,
value 
from string_split('R4;.;K;HM;JL',';')


Результат:
1 R4
2 .
3 K
4 HM
5 JL


Или лучше использовать ранее озвученную функцию для парсинга строки?
30 май 17, 16:34    [20524356]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос на преобразование строки в столбец значений  [new]
CrazyDr1v3r
Guest
DECLARE @tbl TABLE ( value nvarchar(4000))
INSERT INTO @tbl (value) VALUES ('a^b^c^d^e^f^g^h')

;WITH tmp(Dataitem, value, row_num) AS (
		SELECT LEFT(value, CHARINDEX('^',value+'^')-1),
			STUFF(value, 1, CHARINDEX('^',value+'^'), ''),
			1 AS row_num
		FROM @tbl
		UNION ALL
		SELECT LEFT(value, CHARINDEX('^',value+'^')-1),
			STUFF(value, 1, CHARINDEX('^',value+'^,'), ''),
			row_num + 1 AS row_num
		FROM tmp
		WHERE value <>''
		)
		SELECT Dataitem, row_num
		FROM tmp
30 май 17, 17:29    [20524636]     Ответить | Цитировать Сообщить модератору
 Re: SQL запрос на преобразование строки в столбец значений  [new]
CrazyDr1v3r
Guest
Результат

Dataitem row_num
a 1
b 2
c 3
d 4
e 5
f 6
g 7
h 8
30 май 17, 17:33    [20524652]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить