如何在Exasol中生成两日期间的日期列表(对标PostgreSQL实现)
在Exasol中生成日期序列(替代PostgreSQL的generate_series)
当然可以!Exasol虽然没有PostgreSQL里那种直接开箱即用的generate_series函数,但咱们有几种简单的方式实现完全一样的效果,生成两个日期之间的所有日期列表。
先回顾一下你提到的PostgreSQL实现:
在PostgreSQL中,生成两个日期之间的所有日期列表相当简单:
select generate_series('2013-01-01'::date, '2013-01-06'::date, '1 day'::interval)::date i;输出结果:
i ---------- 2013-01-01 2013-01-02 2013-01-03 2013-01-04 2013-01-05 2013-01-06
下面是两种在Exasol中实现相同结果的方法:
方法1:使用递归CTE
这是最直观的方式,通过递归逐步生成每个日期:
WITH RECURSIVE date_series AS ( -- 起始日期 SELECT DATE '2013-01-01' AS i UNION ALL -- 每次递归增加1天 SELECT i + INTERVAL '1' DAY FROM date_series -- 递归终止条件:不超过结束日期 WHERE i < DATE '2013-01-06' ) -- 输出所有日期 SELECT i FROM date_series;
方法2:使用Exasol内置的NUMBERS表
Exasol提供了NUMBERS表来生成连续整数,我们可以基于它转换为日期序列:
SELECT DATE '2013-01-01' + (level - 1) * INTERVAL '1' DAY AS i FROM ( -- 生成从1开始的N个整数,N是日期差+1(包含首尾日期) SELECT LEVEL FROM NUMBERS(1, DATEDIFF('DAY', DATE '2013-01-01', DATE '2013-01-06') + 1) );
两种方法的输出结果都和PostgreSQL的示例完全一致:
i ---------- 2013-01-01 2013-01-02 2013-01-03 2013-01-04 2013-01-05 2013-01-06
内容的提问来源于stack exchange,提问作者Jivan
相关产品推荐
相关产品推荐

