【问题标题】:How to Populate the numbers between a range of two values using Oracle SQL如何使用 Oracle SQL 填充两个值范围之间的数字
【发布时间】:2021-09-04 20:14:07
【问题描述】:
我有一个表,有 2 列,例如 Minvalue 和 Maxvalue,值如下
Minvalue | Maxvalue
5 | 12
想写一个 SQL 查询来显示最小值和最大值范围之间的数字序列,如下所示
Output
Values
--------
5
6
7
8
9
10
11
12
提前致谢
【问题讨论】:
标签:
sql
oracle
oracle11g
oracle-sqldeveloper
【解决方案1】:
CONNECT BY LEVEL 子句可用于此目的。它将生成一个从 LEVEL = 1 开始的列表。LEVEL BETWEEN x and y 不起作用,但解决方法是:
- 遍历间隙(介于 5 和 12 之间)并将起始值添加到每个条目。您需要从 1 而不是 0 开始调整 LEVEL。
SELECT level + 4 FROM dual
CONNECT BY LEVEL <= 8
- 使用 CTE
WITH min_max(min_val, max_val) AS
(SELECT 5 , 12 FROM DUAL)
SELECT LEVEL + min_val - 1
FROM min_max CONNECT BY LEVEL <= (max_val - min_val) + 1
【解决方案2】:
根据参数连接
with prms as (
select 5 minval, 12 maxval from dual
)
select prms.minval + rownum - 1
from prms connect by prms.minval + rownum - 1 <= prms.maxval