文章目录
使用层次查询生成序列
生成一个连接的数字序列
生成一个间隔的数字序列
生成一个连续的字符序列
生成一个间隔的时间序列
使用表函数生成序列
创建模拟的 generate_series 函数
使用 generate_series 函数生成序列
使用通用表表达式生成序列
生成一个等差数字序列
生成一个等比数字序列
生成斐波那契数列
生成一个连续的字符序列
生成一个间隔的时间序列
今天我们继续介绍如何在 Oracle 数据库中生成连续的数字/字符/时间序列。
📝如果你使用的是 MySQL 数据库,实现相同的功能可以参考这篇文章。
📝如果你使用的是 PostgreSQL,实现相同的功能可以参考这篇文章。
📝如果你使用的是 SQL Server,实现相同的功能可以参考这篇文章。
在 Oracle 中实现数据行生成的方法有很多,本文只介绍几种常用的语法。
使用层次查询生成序列
Oracle 提供了 CONNECT BY 层次查询,可以用于生成数字序列。
生成一个连接的数字序列
以下语句使用 CONNECT BY 和 LEVEL 伪列生成了一个连续的数字序列:
SELECT LEVEL AS n
FROM dual
WHERE LEVEL >= 11
CONNECT BY LEVEL <= 15;
N |
--|
11|
12|
13|
14|
15|
通过修改查询条件中的 LEVEL 范围,可以返回不同的数字序列。
除了使用 LEVEL 伪列之外,也可以使用 ROWNUM 伪列实现相同的功能:
SELECT rownum AS n
FROM dual
CONNECT BY LEVEL <= 5;
N|
-|
1|
2|
3|
4|
5|
生成一个间隔的数字序列
以下查询利用 mod 函数返回了一个从 2 到 15 之间、增量为 3 的数字序列:
SELECT LEVEL AS n
FROM dual
WHERE LEVEL >= 2 AND MOD(LEVEL-2, 3)=0
CONNECT BY LEVEL <= 15;
N |
--|
2|
5|
8|
11|
14|
以下查询返回了一个增量为 -2.5、范围从 15 到 1.4 之间的降序数字序列:
SELECT (LEVEL-1) * -2.5 + 15 AS n
FROM dual
WHERE LEVEL >= 1
CONNECT BY (LEVEL-1) * -2.5 + 15 >= 1.4;
N |
----|
15|
12.5|
10|
7.5|
5|
2.5|
生成一个连续的字符序列
基于上面的层次查询和 chr(n) 函数可以生成连续的字符序列。例如:
SELECT CHR(LEVEL-1+65) AS letter
FROM dual
CONNECT BY LEVEL-1 <= 70-65;
LETTER|
------|
A |
B |
C |
D |
E |
F |
该查询返回了字符 A 到 F 的序列,chr(n) 函数用于将 ASCII 编码转化为相应的字符。
Oracle 如何生成连续的数字/字符/时间序列
最新推荐文章于 2023-09-21 09:24:16 发布