如何在Vertica中实现Oracle的connect by level生成连续数值?
在Vertica中生成1到20的连续数值列
Vertica不支持Oracle的CONNECT BY语法,不过有几种简洁的方式可以实现生成连续数值序列的需求,推荐两种常用方案:
方法一:使用GENERATE_SERIES函数(推荐)
这是Vertica专门用于生成序列的内置函数,语法简单直接,完全匹配你的需求:
SELECT generate_series(1, 20) AS num;
参数说明:第一个值是序列起始数,第二个是结束数,步长默认是1,无需额外指定。如果需要调整步长(比如步长为2),只需添加第三个参数:generate_series(1,20,2)。
方法二:递归CTE(适用于较旧Vertica版本)
如果你的Vertica版本不支持GENERATE_SERIES(比如早于9.x版本),可以用递归公共表表达式实现:
WITH recursive series AS ( SELECT 1 AS num UNION ALL SELECT num + 1 FROM series WHERE num < 20 ) SELECT num FROM series;
这个逻辑从1开始,每次自增1,直到数值达到20为止。
对比你原有的Oracle语句:
Oracle写法:
select rownum from dual connect by level <22
Vertica的GENERATE_SERIES完全可以替代上述逻辑,且代码可读性更强。
内容的提问来源于stack exchange,提问作者wojteka
相关产品推荐
相关产品推荐

