如何在两个数字之间生成一定范围的Alpha数字?

时间:2019-09-02 04:30:45

标签: sql-server sql-server-2012 sql-server-2008-r2

我有一个清单AP80000-AP81000。我需要Qry来获取续号liske A80000 A80001 A80002 A80003 等

1 个答案:

答案 0 :(得分:1)

您需要从给定的字符串中找到您的数字范围,这将通过使用substringcharindex获得。尽管还有其他多种方法可以实现此目的。但是例如,我们将尝试使用它。

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)