Sql 将文本拆分为4个字符,不带分隔符
你知道如何将一长串文本分割成多个记录,每个记录的固定宽度为4个字符,并且没有分隔符吗 例如: 资料来源:Sql 将文本拆分为4个字符,不带分隔符,sql,sql-server,ssis,split,substring,Sql,Sql Server,Ssis,Split,Substring,你知道如何将一长串文本分割成多个记录,每个记录的固定宽度为4个字符,并且没有分隔符吗 例如: 资料来源: 1 11223344 2 ABCD 3 XYZ12345 预期结果: 1 1122 1 3344 2 ABCD 3 XYZ1 3 2345 长文本字符串当前位于表的一列中。我的最终结果是将它的前4个字符放入一个记录,下4个字符放入另一个记录,依此类推。我还需要有一个标识符,告诉我第一个X数量的记录属于源文件等的第一个记录(在上面的示例中,它是第一列-1、2、3)遵循以下步骤
1 11223344
2 ABCD
3 XYZ12345
预期结果:
1 1122
1 3344
2 ABCD
3 XYZ1
3 2345
长文本字符串当前位于表的一列中。我的最终结果是将它的前4个字符放入一个记录,下4个字符放入另一个记录,依此类推。我还需要有一个标识符,告诉我第一个X数量的记录属于源文件等的第一个记录(在上面的示例中,它是第一列-1、2、3)遵循以下步骤
CREATE FUNCTION SplitStringByLength
(
@inputString varchar(max),
@length int
)
RETURNS @SplitStrings TABLE( SplitString VARCHAR(50) )
AS
BEGIN
DECLARE @s VARCHAR(50)
WHILE len(@inputString) > 0
BEGIN
SET @s = left(@inputString, @length)
SET @inputString = right(@inputString, len(@inputString) - @length)
INSERT @SplitStrings VALUES (@s)
END
RETURN
END
SELECT ID ,SplitString
FROM YourTable
CROSS APPLY
dbo.SplitStringByLength (YourColumn,4)-- mention the character length to split
使用此查询获得所需的输出:
Select substring('11223344',0,5)
Select substring('11223344',5,9)
Select substring('ABCD',0,5)
------Select substring('ABCD',5,9)
Select substring('XYZ12345',0,5)
Select substring('XYZ12345',5,9)
递归CTE可以帮助您:
;WITH cte AS (
SELECT ID,
CAST(SUBSTRING(string,1,4) as nvarchar(4))as S,
LEN(String) as L,
1 as [Level]
FROM YourTable
UNION ALL
SELECT y.ID,
CAST(SUBSTRING(string,(4*[Level])+1,(4*[Level])+4) as nvarchar(4)),
L-4,
[Level]+1
FROM YourTable y
INNER JOIN cte c
ON y.ID = c.ID
WHERE L > 4
)
SELECT ID,
S
FROM cte
ORDER BY ID
输出:
ID S
1 1122
1 3344
2 ABCD
3 XYZ1
3 2345
是在表的一个字段中放入多个记录的一个长字符串吗?或多个字段、表格?长文本字符串当前位于表格的一列中。我的最终结果是将它的前4个字符放入一个记录,下4个字符放入另一个记录,依此类推。我还需要一个标识符来告诉第一个X数量的记录属于源文件等的第一个记录(在上面的示例中,它是第一列-1,2,3)。您的源代码中没有分隔符?
我认为如果您的源代码是那样的11223344
分隔符是选项卡
然后您看到的第一个1只是另一列,id字段。不幸的是,需要拆分的文本字段没有分隔符。分割的规则是按宽度,每个4个字符。