MS T-SQL如何将号码范围转换为单个号码列表
MS SQL 号码范围展开CTE实现方案
完全可以通过递归CTE实现需求,不需要创建临时表,代码如下:
-- 假设你的范围表名为 NumberRanges,字段为 [Range Start]、[Range End] WITH RecursiveNumGen AS ( -- 锚点:取每个号码范围的起始值 SELECT CAST([Range Start] AS BIGINT) AS current_num, CAST([Range End] AS BIGINT) AS end_num FROM NumberRanges UNION ALL -- 递归:每次加1,直到抵达范围结束值 SELECT current_num + 1, end_num FROM RecursiveNumGen WHERE current_num < end_num ) -- 输出结果,转回字符串并补前导零保证格式和原始一致 SELECT RIGHT('00000000000' + CAST(current_num AS VARCHAR(11)), 11) AS Result FROM RecursiveNumGen ORDER BY Result -- 取消递归深度限制,适配长跨度的号码范围 OPTION (MAXRECURSION 0);
注意事项
- 如果你的号码长度不是11位,可自行调整
RIGHT函数中前导零的数量和VARCHAR的长度参数 - 若所有号码范围的跨度都不超过100,可将
MAXRECURSION的值设为对应最大跨度,不需要直接设为0
内容的提问来源于stack exchange,提问作者Rob
相关产品推荐
相关产品推荐

