如何使用Oracle SQL填充两个值之间的数字



我有一个表,有两列,如Minvalue和Maxvalue,值如下

Minvalue  |   Maxvalue
5      |     12

想写一个SQL查询来显示最小值和最大值范围之间的数字序列,如下

Output
Values
--------
5
6
7
8
9
10
11
12

提前感谢

CONNECT BY LEVEL子句可以用于此。它将生成一个从LEVEL=1开始的列表。LEVEL BETWEEN x and y不起作用,但解决方法是:

  1. 循环通过间隙(介于5和12之间(,并将起始值添加到每个条目。您需要调整LEVEL从1开始,而不是从0开始
SELECT level + 4 FROM dual 
CONNECT BY LEVEL <= 8
  1. 使用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

根据参数连接

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

最新更新