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)