我有一个清单AP80000-AP81000。我需要Qry来获取续号liske A80000 A80001 A80002 A80003 等
答案 0 :(得分:1)
您需要从给定的字符串中找到您的数字范围,这将通过使用substring
和charindex
获得。尽管还有其他多种方法可以实现此目的。但是例如,我们将尝试使用它。
declare @str nvarchar(max) = 'AP80000-AP81000'
declare @start int
declare @end int
select
@start = SUBSTRING( @str,3, charindex('-',@str)-3) ,
@end = SUBSTRING( @str , CHARINDEX('-',@str)+3, 5)
之后,使用recursive cte
将生成此范围内的数字。您将在link上找到更多信息。
;WITH gen AS (
SELECT @start AS NUM
UNION ALL
SELECT num+1 FROM gen WHERE num+1<=@end
)
select NUM from gen
option (maxrecursion 10000)
最后,您将在生成的数字后缀后缀以得到所需的结果。
最终代码块如下所示。
declare @str nvarchar(max) = 'AP80000-AP81000'
declare @start int
declare @end int
select
@start = SUBSTRING( @str,3, charindex('-',@str)-3) ,
@end = SUBSTRING( @str , CHARINDEX('-',@str)+3, 5)
;WITH gen AS (
SELECT @start AS num
UNION ALL
SELECT num+1 FROM gen WHERE num+1<=@end
)
select CONCAT('AP', num) from gen
option (maxrecursion 10000)