You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle中如何将数值范围拆分为单个数值?

将SN范围表展开为单个SN行

原始数据

START_SNEND_SN
850000850003
850015850017

期望结果

SN
850000
850001
850002
850003
850015
850016
850017

解决方案(通用SQL)

使用递归公共表表达式(CTE)可实现范围展开,兼容MySQL 8+、PostgreSQL、SQL Server等主流数据库:

WITH RECURSIVE sn_range AS (
    SELECT START_SN AS sn, END_SN
    FROM your_table_name
    UNION ALL
    SELECT sn + 1, END_SN
    FROM sn_range
    WHERE sn < END_SN
)
SELECT sn AS SN
FROM sn_range
ORDER BY sn;

执行逻辑

  1. 初始查询:提取每条范围记录的起始SN和结束SN,作为递归的基础数据。
  2. 递归迭代:每次将当前SN加1,直到SN等于结束SN时停止迭代。
  3. 最终输出:取出所有生成的SN并排序,得到单个SN的列表。

兼容低版本MySQL(5.x)

如果使用不支持递归CTE的MySQL 5.x,可预先创建一个包含连续数字的辅助表,再通过JOIN匹配范围:

-- 先创建数字辅助表(示例生成0-1000的数字)
CREATE TABLE numbers (num INT);
INSERT INTO numbers VALUES (0),(1),(2),...,(1000);

-- 展开范围
SELECT t.START_SN + n.num AS SN
FROM your_table_name t
JOIN numbers n ON n.num <= t.END_SN - t.START_SN
ORDER BY SN;

内容的提问来源于stack exchange,提问作者JustPBK

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 13:29:58