我有以下疑问:
DECLARE @a VARCHAR(50)= '07071318_G08(1,2,3,4,8,9,11)';
SELECT SUBSTRING(@a, CHARINDEX('(', @a) + 1, CHARINDEX(')', @a) - CHARINDEX('(', @a) - 1) as Val;
其输出为:
1,2,3,4,8,9,11
但我需要显示如下输出:
1-4,8-9,11
这意味着我需要将序列号(如果有的话)组合在一起。有人能帮我吗?
我有以下疑问:
DECLARE @a VARCHAR(50)= '07071318_G08(1,2,3,4,8,9,11)';
SELECT SUBSTRING(@a, CHARINDEX('(', @a) + 1, CHARINDEX(')', @a) - CHARINDEX('(', @a) - 1) as Val;
其输出为:
1,2,3,4,8,9,11
但我需要显示如下输出:
1-4,8-9,11
这意味着我需要将序列号(如果有的话)组合在一起。有人能帮我吗?
2条答案
按热度按时间uttx8gqw1#
一种可能的方法是使用以下语句
STRING_SPLIT()
(要拆分逗号分隔的数字),ROW_NUMBER()
(定义孤岛和缺口)和CONCAT_WS()
以及STRING_AGG()
(对于字符串聚合):结果:
zpjtge222#
既然你在2017年,你就可以使用
string_agg()
,但首先我们执行Gaps-and-Islands
例子退货
注意:如果复制字符串中的值,如…3,3,3。。。你可能得改用
dense_rank()
而不是row_number()
编辑-2014版