SQL如何基于固定增量划分数值区间 不使用parts参数分段
固定增量连续区间划分SQL实现
核心调整逻辑
- 移除原有依赖
parts分段数计算增量的逻辑,直接传入固定增量值完成划分,避免分段数固定导致的区间长度不符合业务要求的问题 - 区间首尾严格对齐传入的最小、最大边界,最后一段不足固定增量长度时,自动截断到最大值
- 相邻区间连续无重叠,后一段起始值固定为前一段结束值+1
调整后可直接运行的SQL代码
declare @min numeric(18,0) declare @max numeric(18,0) -- 直接指定固定增量值,已移除parts相关参数 declare @increment int = 10 select @min = 100 ,@max = 204 -- 临时表存储划分结果,支持直接查询返回结构化数据 create table #range_result (FromVal numeric(18,0), ToVal numeric(18,0)) while @max >= @min begin declare @currentTo numeric(18,0) -- 尾段自动截断:当前段计算结束值超过最大值时,直接取最大值作为段终点 if @min + @increment > @max set @currentTo = @max else set @currentTo = @min + @increment insert into #range_result values (@min, @currentTo) -- 下一段起点衔接当前段终点,保证区间连续无重叠 set @min = @currentTo + 1 end -- 输出最终划分结果 select FromVal as [From], ToVal as [To] from #range_result drop table #range_result
执行效果
传入@min=100、@max=204、@increment=10时,输出完全匹配预期:
From To -------- 100 110 111 121 122 132 133 143 144 154 155 165 166 176 177 187 188 198 199 204
使用说明
- 业务使用时直接修改
@min、@max、@increment三个入参的值即可,不需要调整其他逻辑 - 增量值支持传入任意正整数(如10、100),最终返回的区间行数会根据边界差值和增量值自动计算,不受固定分段数限制
内容的提问来源于stack exchange,提问作者Suraj Kumar
相关产品推荐
相关产品推荐

