在SQL中使用两个分隔符分隔字母数字数据;而且 -

时间:2017-10-20 16:37:43

标签: sql sql-server tsql

我有" A001等数据; A009; A011-A015; A055; B101-B104"

;只会将数据拆分成行。

+------+
| A001 | 
+------+
| A009 | 
+------+
| A055 | 
+------+

- 只会将数据拆分成行。

+------+
| A011 | 
+------+
| A012 | 
+------+
| A013 | 
+------+
| A014 | 
+------+
| A015 | 
+------+
| B101 | 
+------+
| B102 | 
+------+
| B103 | 
+------+
| B104 | 
+------+

SQL查询如何做到这一点?

1 个答案:

答案 0 :(得分:0)

这将执行虚线拆分

可能会创建一个表值函数来返回结果集

declare @dashed varchar(100) = 'A005-A015'

declare @start int = cast(substring(@dashed,2,3) as int)
    ,@end int = cast(substring(@dashed,7,3) as int)
    ,@prefix varchar(1) = left(@dashed,1)
declare @val int = @start

declare @t table(vals varchar(10))

while(@val<=@end)
BEGIN
    insert into @t values(@prefix + RIGHT('00'+CAST(@val as varchar(3)),3))
    set @val=@val+1
END

select * from @t




--Tally solution

--This should be done once for real and never have to do it again
declare @t2 table (num int)
declare @i int = 0

while(@i <200)
BEGIN 
    insert into @t2 values(@i)
    set @i=@i+1
END

select @prefix + RIGHT('00'+CAST(num as varchar(3)),3)
from @t2
where num between @start and @end
相关问题