Member 13891259 Ответов: 2

SQL как вставить преобразовать разбить строку на столбцы, разделенных символом '@'


ЧТО-ТО ВРОДЕ ЭТОГО :

INSERT INTO @MyTableVar (C1,C2,C3,C4,C5,C6,C7,C8,C9) select @C1,@C2,@C3,@C4,@C5,@C6,@C7,@C8,@C9 from [dbo].[fnSplit](@MyStr, '@')


ПРОБЛЕМА В ТОМ, ЧТО ОНА ПОСТАВЛЯЕТСЯ В ВИДЕ ОДНОГО СТОЛБЦА, В ТО ВРЕМЯ КАК В МОЕМ СЛУЧАЕ Я ХОЧУ ВСТАВИТЬ ПОДСТРОКИ В ОДНО ПОЛЕ (СТРОКУ ИЛИ СТРОКУ) В ЭТОЙ ТАБЛИЦЕ

СПАСИБО ЗАРАНЕЕ ^_^

Что я уже пробовал:

declare @MyStr Nvarchar(MAX);
SET @MyStr='ID@MESSAGE@IATA@FlightSuffix@DATE@NOTE@action@DATI@1'
SET @ID = Substring(@MyStr, 1,(Charindex('@', @MyStr)-1));
SET @REMAIN = Substring(@MyStr, Charindex('@', @MyStr)+1, LEN(@MyStr));

2 Ответов

Рейтинг:
2

Maciej Los

Взгляните сюда: Использование разделенных запятыми строк параметров значений в предложениях SQL IN[^]
Там вы найдете способ, как создать функцию для разделения строки на части.

Другой способ-создавать КТОС[^]. Проверьте мои прошлые ответы:
разделите несколько значений для одного столбца[^]
получите 2-ю и 3-ю строки, разделив длинную строку с помощью T-Sql[^]

Все, что вам нужно сделать, это изменить разделитель из [,] к [@]

Обратите внимание, что SQL Server 2016 имеет встроенную функцию: STRING_SPLIT (Transact-SQL) - SQL Server | Microsoft Docs[^]


Рейтинг:
0

MadMyche

Может быть, вы хотите, чтобы сводная таблица была получена из раскола?
Экземпляр, на котором я нахожусь, не имеет функции SQL Split_String, а только функцию одного столбца... возможно, Вам потребуется внести коррективы в зависимости от настроек ваших машин

DECLARE @entry NVARCHAR(100) = 'c1@c2@c3@c4@c5@c6@c7@c8@c9'
DECLARE @parse TABLE (RowN INT identity(1,1) NOT NULL, element NVARCHAR(100))

INSERT  @parse (element)
SELECT  Val
FROM    dbo.fnSplitString(@entry, '@')

SELECT  ColumnName = 'data', [1], [2], [3], [4], [5], [6], [7], [8]
FROM	(  SELECT  RowN, element
           FROM    @parse									 
) AS SourceTable

PIVOT	(  Max(Element)
           FOR RowN IN ([1], [2], [3], [4], [5], [6], [7], [8])
) AS PivotTable

Который вернется
ColumnName  1   2   3   4   5   6   7   8
----------  --  --  --  --  --  --  --  --
data        c1  c2  c3  c4  c5  c6  c7  c8