Oracle 如何生成连续的数字/字符/时间序列

文章目录

        使用层次查询生成序列
            生成一个连接的数字序列
            生成一个间隔的数字序列
            生成一个连续的字符序列
            生成一个间隔的时间序列
        使用表函数生成序列
            创建模拟的 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 编码转化为相应的字符。

更多请见:http://www.mark-to-win.com/tutorial/51527.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值