powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Разделить много текстовых строк на отдельные значения
13 сообщений из 13, страница 1 из 1
Разделить много текстовых строк на отдельные значения
    #40075092
Tavocer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день,
в таблице имеется столбец данных varchar
строка 1 '78887 а45 f56'
строка 2 '564 78h 123456 86'
.........
строка 100000 '9845 h4545 98856 а45'

каждая строка содержит какие-то значения, разделенные пробелом, каждое разной длины. Каждая строка имеет разное количество значений.
Всего порядка 100 тысяч строк.
Значения в строках повторяются (как в примере а45)

Задача:
Значения привести в один столбец, причем без повторений, вот так:
78887
а45
f56
564
78h
123456
86
...
9845
h4545
98856

Умею сделать с одной строкой
(SELECT LTRIM(RTRIM(Split.a.value('.', 'VARCHAR(100)'))) 'Kody'
FROM (SELECT CAST('<M>' + REPLACE((SELECT строка FROM таблица), ' '/*delimiter*/, '</M><M>') + '</M>' AS XML) AS Data) AS A
CROSS APPLY Data.nodes ('/M') AS Split(a)) назв_табл

однако не доходит как сделать на много строк (((
STRING_SPLIT не работает.
Спасибо за идеи.
...
Рейтинг: 0 / 0
Разделить много текстовых строк на отдельные значения
    #40075097
msLex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tavocer
STRING_SPLIT не работает.


Из-за чего?
...
Рейтинг: 0 / 0
Разделить много текстовых строк на отдельные значения
    #40075099
Tavocer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
msLex, 'string_split' is not a recognized built-in function name.

SSMS 18.8, SQL Server Express 2019
...
Рейтинг: 0 / 0
Разделить много текстовых строк на отдельные значения
    #40075114
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tavocer
SQL Server Express 2019
Значит уровень совместимости у БД меньше 130.
Повысьте и string_split заработает.
...
Рейтинг: 0 / 0
Разделить много текстовых строк на отдельные значения
    #40075115
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уровень совместимости вашей базы данных смотрите в её свойствах
...
Рейтинг: 0 / 0
Разделить много текстовых строк на отдельные значения
    #40075123
Tavocer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Konst_One,
это я понимаю, но база данных не моя и думаю, нельзя повысить совместимость.

Можно ли решить задачу без string_split ?
...
Рейтинг: 0 / 0
Разделить много текстовых строк на отдельные значения
    #40075141
aleks222
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tavocer
Konst_One,
это я понимаю, но база данных не моя и думаю, нельзя повысить совместимость.

Можно ли решить задачу без string_split ?

Можно подумать string_split - откровение господне

Этих вариантов было сделано вагон и маленькая тележка
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
ALTER function [dbo].[f_nStrToTableEx](@str nvarchar(4000), @delimiter nvarchar(64)=',')
returns table as
return(
WITH 
  l as (select ld = LEN(N'|' + @delimiter + N'|') - 2, [s+d] = @str + @delimiter + N'|', ls = len(@str) )
, str_nums ( n1, n2, Number ) AS 
                                ( 
                                select  1 - ld as n1, charindex( @delimiter, [s+d] ) as n2, 0 as Number from l where @str is not null
                                UNION ALL 
                                select n2 as n1, charindex (@delimiter, [s+d], n2 + ld ) as n2, Number + 1 as Number
                                from str_nums cross join l
                                WHERE n2 < ls
                                ) 
select substring( @str, n1 + ld, n2 - n1 - ld ) as Value, Number, n1 + ld as StartPosition FROM str_nums cross join l
)
...
Рейтинг: 0 / 0
Разделить много текстовых строк на отдельные значения
    #40075484
Tavocer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
aleks222, спасибо.

Так STRING_SPLIT работает )))

Однако, вопрос остается. Как решить задачу с помощью STRING_SPLIT ?
...
Рейтинг: 0 / 0
Разделить много текстовых строк на отдельные значения
    #40075486
Кесарь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Tavocer
Konst_One,
это я понимаю, но база данных не моя и думаю, нельзя повысить совместимость.

Можно ли решить задачу без string_split ?



Tavocer
aleks222, спасибо.

Так STRING_SPLIT работает )))

Однако, вопрос остается. Как решить задачу с помощью STRING_SPLIT ?



Вы издеваетесь что ли?
...
Рейтинг: 0 / 0
Разделить много текстовых строк на отдельные значения
    #40075501
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кесарь,

ТС же написал, "база данных не моя и думаю, нельзя повысить совместимость."
...
Рейтинг: 0 / 0
Разделить много текстовых строк на отдельные значения
    #40075503
Tavocer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кесарь, нет, не издеваюсь.
Я же писал, для одной строки могу сделать, а как сделать для много строк?

Вот для одной строки
SELECT value
FROM STRING_SPLIT((SELECT TOP 1 tablica.stolbec FROM tablica), ' ')

Как сделать для всех строк столбца stolbec ?
...
Рейтинг: 0 / 0
Разделить много текстовых строк на отдельные значения
    #40075504
Tavocer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кесарь,
а STRING_SPLIT не работала, потому что не правильно применял, потом разобрался
...
Рейтинг: 0 / 0
Разделить много текстовых строк на отдельные значения
    #40075508
Tavocer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, разобрался

SELECT Distinct value
FROM tablica
CROSS APPLY STRING_SPLIT(stolbec, ' ')
ORDER BY value
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Разделить много текстовых строк на отдельные значения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]