我需要在SQL Server 2012中将一列中的字符串拆分为一个字符,并将每个字符串拆分成它自己的列。
例如:如果我有一个栏'ABCDE'
,我需要把它拆分成'A'
,'B'
,'C'
,'D'
,'E'
,与每个这些转化为自己列。
要拆分的列的长度可能会有所不同,因此我需要使其尽可能地动态。
您可以这样做:
DECLARE @t TABLE(id int, n VARCHAR(50))
INSERT INTO @t VALUES
(1, 'ABCDEF'),
(2, 'EFGHIJKLMNOPQ')
;WITH cte AS
(SELECT id, n, SUBSTRING(n, 1, 1) c, 1 AS ind FROM @t
UNION ALL
SELECT id, n, SUBSTRING(n, ind + 1, 1), ind + 1 FROM cte WHERE LEN(n) > ind
)
SELECT *
FROM cte
PIVOT (MAX(c) FOR ind IN([1],[2],[3],[4],[5],[6],[7],[8],[9],[10],[12],[13],[14],[15])) p
输出:
id n 1 2 3 4 5 6 7 8 9 10 12 13 14 15
1 ABCDEF A B C D E F NULL NULL NULL NULL NULL NULL NULL NULL
2 EFGHIJKLMNOPQ E F G H I J K L M N P Q NULL NULL
这是动态版本:
DECLARE @l INT, @c VARCHAR(MAX) = ''
SELECT @l = MAX(LEN(n)) FROM PivotTable
WHILE @l > 0
BEGIN
SET @c = ',[' + CAST(@l AS VARCHAR(MAX)) + ']' + @c
SET @l = @l - 1
END
SET @c = STUFF(@c, 1, 1,'')
DECLARE @s NVARCHAR(MAX) = '
;WITH cte AS
(SELECT id, n, SUBSTRING(n, 1, 1) c, 1 AS ind FROM PivotTable
UNION ALL
SELECT id, n, SUBSTRING(n, ind + 1, 1), ind + 1 FROM cte WHERE LEN(n) > ind
)
SELECT *
FROM cte
PIVOT (MAX(c) FOR ind IN(' + @c + ')) p'
EXEC (@s)
问题内容: 一些外部数据供应商希望给我一个数据字段-管道分隔的字符串值,我觉得这很难处理。 没有应用程序编程语言的帮助,有没有办法将字符串值转换为行? 但是,存在一个困难,该字段具有未知数量的定界元素。 有问题的数据库引擎是MySQL。 例如: 问题答案: 它可能没有我最初想象的那么困难。 这是一种通用方法: 计算分隔符的出现次数 循环多次,每次获取一个新的定界值并将该值插入第二个表中。
问题内容: 我有一个值为的字符串。我想将字符串分成两个字符串,值为的字符串和的值为字符串。 正确的功能/语法是什么? 我已经看过了,但是找不到将数据返回到两个单独的字符串中的实际语法。 问题答案: 该功能适用于:
问题内容: 我有一个字符串,例如: “ 0123456789” 并且需要将每个EACH字符拆分为一个数组。 我为它的地狱尝试: 但这给了我显而易见的 警告:警告:爆炸中未定义分隔符 。 我怎么会遇到这个?我看不到任何可用的方法,尤其是一个函数 问题答案: str_split采用可选的第二个参数,即块长度(默认为1),因此您可以执行以下操作: 您还可以通过将字符串视为数组来获得字符串的一部分:
如何将过滤器列表拆分为单个过滤器元件?split2String在线程“main”java.util.regex中导致:异常。PatternSyntaxException:索引10或(|和)附近的未闭合组(
我希望能够根据子字符串分隔符拆分字符串,在分隔符子字符串的第一个字符之前开始拆分。现在: 将给我,但我希望得到
问题内容: 欲分割为4的阵列,以利用 这是我的代码: 但是,结果标记是一个空数组:[],而不是 我想要的4数组。 我已经测试过更改一点: 这次的结果标记为。这与我想要的接近,但是我真的不想在拆分之前添加此“ 1”。 问题基本上是,如果它仅包含空元素,它将返回一个空数组。 您能帮助解决问题吗? 问题答案: 您需要使用带有limit参数的重载方法。 从文档(重点是我的): limit参数控制应用图案的