Sql server 如何在两个数字之间生成字母数字范围?

Sql server 如何在两个数字之间生成字母数字范围?,sql-server,sql-server-2012,sql-server-2008-r2,Sql Server,Sql Server 2012,Sql Server 2008 R2,我有一个AP80000-AP81000的号码列表。我需要Qry来获取liske的电话号码 A80000 A80001 A80002 A80003 等等。您需要从给定字符串中找到您的数字范围,您可以使用substring和charindex获得该范围。尽管还有其他各种方法可以实现这一点。但举个例子,我们会尝试一下 declare @str nvarchar(max) = 'AP80000-AP81000' declare @start int declare @end int select

我有一个AP80000-AP81000的号码列表。我需要Qry来获取liske的电话号码 A80000 A80001 A80002 A80003
等等。

您需要从给定字符串中找到您的数字范围,您可以使用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) 
之后,通过使用递归cte,您将生成此范围的数字。你会找到更多关于这个的信息

最后,将后缀连接到生成的数字前面,以获得所需的结果

最后的代码块如下所示

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)


您的需求似乎与在SQL Server中生成一系列整数没有任何区别。你研究过你的问题吗?hai@TimBiegeleisen我已经研究过你的答案了。但是如果我们使用分隔字符部分,替换字符部分,并在结尾连接,将需要很多变量。这是我的过程的一小部分,如果我为此添加4或5个变量,该过程将成为一个复杂的过程复杂的这就是我问这个问题的原因。我把qry部分改成了函数。谢谢你抽出时间。
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)