首页 > 解决方案 > 如何将 nvarchar 的每 7 个字符提取到另一个表中?

问题描述

我在 Table1 中有一个名为 ColumnA 的 nvarchar(200),其中包含例如值:

ABCDEFGHIJKLMNOPQRSTUVWXYZ

我想将每 7 个字符提取到 Table2 的 ColumnB 中,并最终得到以下所有这些值。

ABCDEFG
BCDEFGH
CDEFGHI
DEFGHIJ
EFGHIJK
FGHIJKL
GHIJKLM
HIJKLMN
IJKLMNO
JKLMNOP
KLMNOPQ
LMNOPQR
MNOPQRS
NOPQRST
OPQRSTU
PQRSTUV
QRSTUVW
RSTUVWX
STUVWXY
TUVWXYZ

[不是真正的表名和列名。]

数据被加载到 SSIS 包中的 Table1 和 Table2 中,我想知道是在 SQL 任务中在 TSQL 中进行字符串处理还是在 VB 脚本组件中解析出字符串更好。

[是的,我认为我们是地球上最后四个在脚本组件中使用 VB 的公司。我无法说服其他三个人相信这个 C# 东西会一直存在。虽然,也许现在是去流氓的最佳时机。]

标签: sql-servervb.nettsqlssisetl

解决方案


您可以使用递归 CTE 逐步计算偏移量,并且substring().

WITH
cte
AS
(
SELECT 1 n
UNION ALL
SELECT n + 1 n
       FROM cte
       WHERE n + 1 <= len('ABCDEFGHIJKLMNOPQRSTUVWXYZ') - 7 + 1
)
SELECT substring('ABCDEFGHIJKLMNOPQRSTUVWXYZ', n, 7)
       FROM cte;

db<>小提琴


推荐阅读