PostgreSQL固有
generate_series()セットを生成するので、from句内だけでなく、セットが発生する可能性のある場所で使用できます
psql=# select generate_series(10, 20, 3);
generate_series
-----------------
10
13
16
19
(4 rows)
セットに対して直接操作を行うこともできます。
psql=# select 2000 + generate_series(10, 20, 3) * 2;
?column?
----------
2020
2026
2032
2038
(4 rows)
複数のセットの長さが同じ場合、それらを並行して走査できます。
psql=# select generate_series(1, 3), generate_series(4, 6);
generate_series | generate_series
-----------------+-----------------
1 | 4
2 | 5
3 | 6
(3 rows)
長さが異なるセットの場合、デカルト積が生成されます。
psql=# select generate_series(1, 3), generate_series(4, 5);
generate_series | generate_series
-----------------+-----------------
1 | 4
2 | 5
3 | 4
1 | 5
2 | 4
3 | 5
(6 rows)
ただし、from句でそれらを使用すると、同じ長さセットのデカルト積も取得されます。
psql=# select * from generate_series(1, 2), generate_series(3, 4) second;
generate_series | second
-----------------+--------
1 | 3
1 | 4
2 | 3
2 | 4
(4 rows)
また、一連のタイムスタンプを生成することもできます。たとえば、2000-06-30に生まれ、週末に誕生日を祝った年を知りたい場合:
psql=# select to_char(generate_series, 'YYYY - Day') from generate_series('2000-06-30', current_date, interval '1 year') where to_char(generate_series, 'D') in ('1', '7');
to_char
------------------
2001 - Saturday
2002 - Sunday
2007 - Saturday
2012 - Saturday
2013 - Sunday
(5 rows)