У меня есть столбец, который включает все группы учетных записей и разделяет их пробелами.Я хочу разбить все эти группы на каждый новый столбец, аналогично инструменту «Текст в столбцы» в Excel, который может разбить один столбец текста на несколько столбцов и назначить имя нового столбца для каждого нового столбца разделения.Я пробовал charindex, но, похоже, были некоторые ошибки.
Спасибо!
Существующий столбец:
Account Groups
ab bc cd cbd chjk
abc
ab bc
bc
Новые столбцы, которые мне нужны:
Account1 Account2 Account3 Account4 Account5
--------------------------------------------
ab bc cd cbd chjk
abc
ab bc
bc
Код, который я использовал: Iсначала создал функцию для разделения столбца.
CREATE FUNCTION dbo.newCOLUMNS
(@TEXT VARCHAR(8000),
@COLUMN TINYINT,
@SEPARATOR CHAR(1))
RETURNS VARCHAR(8000)
AS
BEGIN
DECLARE @POS_START INT = 1
DECLARE @POS_END INT = CHARINDEX(@SEPARATOR, @TEXT, @POS_START)
WHILE (@COLUMN > 1 AND @POS_END > 0)
BEGIN
SET @POS_START = @POS_END + 1
SET @POS_END = CHARINDEX(@SEPARATOR, @TEXT, @POS_START)
SET @COLUMN = @COLUMN - 1
END
IF @COLUMN > 1
SET @POS_START = LEN(@TEXT) + 1
IF @POS_END = 0
SET @POS_END = LEN(@TEXT) + 1
RETURN SUBSTRING (@TEXT, @POS_START, @POS_END - @POS_START)
END
А затем я поместил эту функцию в свою таблицу:
SELECT
dbo.newCOLUMNS([Name], 1, ' ') as Account1,
dbo.newCOLUMNS([Name], 2, ' ') as Account2,
dbo.newCOLUMNS([Name], 3, ' ') as Account3,
dbo.newCOLUMNS([Name], 4, ' ') as Account4,
dbo.newCOLUMNS([Name], 5, ' ') as Account5,
dbo.newCOLUMNS([Name], 6, ' ') as Account6,
dbo.newCOLUMNS([Name], 7, ' ') as Account7,
dbo.newCOLUMNS([Name], 8, ' ') as Account8,
dbo.newCOLUMNS([Name], 9, ' ') as Account9,
dbo.newCOLUMNS([Name], 10, ' ') as Account10,
dbo.newCOLUMNS([Name], 11, ' ') as Account11
FROM
myTable;
Запрос может возвращать только частичные результаты, и вот ошибкасообщение:
Сообщение 537, уровень 16, состояние 2, строка 1
Недопустимый параметр длины, переданный в функцию LEFT или SUBSTRING.