我有一列包含所有帐户组并按空格分隔。我想将所有这些组拆分到每个新列中,类似于 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
我使用的代码:我创建了一个函数来首先分隔列。
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 函数的长度参数无效。