我是如何将一长串文本拆分成多个记录的,每个记录的宽度固定为4个字符且没有分隔符?
例如:
来源:
1 11223344
2 ABCD
3 XYZ12345
预期结果:
1 1122
1 3344
2 ABCD
3 XYZ1
3 2345
长文本字符串当前位于表格的一列中。我的最终结果是将它的前4个字符放入一个记录中,接下来的4个字符放入另一个记录中,依此类推。我还需要有一个标识符来告诉第一个X数量的记录属于源文件的第一个记录等(在上面的例子中,它是第一列 - 1,2,3)
答案 0 :(得分:1)
将此查询用于所需的输出:
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)
答案 1 :(得分:0)
按照以下步骤操作。
创建一个按字符长度分割数据的函数。
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
答案 2 :(得分:0)
递归CTE可以帮助您:
<div class="div_back">
<div class="div_front">
<form>
<label for="username"></label>
<input type="text" id="username" name="username" style="text-align:center" placeholder="username">
<label for="password"></label>
<input type="text" id="password" name="password" style="text-align:center" placeholder="password">
<input type="submit" value="Sign In">
<div style="display:flex; padding:0px;">
<input type="submit_reset" value="Forgot password?" style="margin-right:5px;">
<input type="submit_signup" value="Sign Up">
</div>
</form>
</div>
</div>
输出:
;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