DB/PostgreSQL
[PostgreSQL] 시간, 숫자, 날짜 생성하기 (generate_series)
불곰1
2022. 2. 20. 16:40
파이썬과 같은 프로그래밍 언어에서 1~10까지의 수를 생성하거나 2022-01-01 ~ 2022-01-10 까지의 날짜를 생성하는 것은 반복문을 통해 쉽게 만들 수 있습니다.
postgresql에서도 generate_series 함수를 사용하면 이러한 문제를 쉽게 해결할 수 있습니다.
generate_series(start, stop, [step 또는 interval))
3번째 인자는 입력된 타입이 int인지 timestamp인지에 따라서 step 이거나 inteval을 줄 수 있습니다.
SELECT * FROM generate_series(2,4);
generate_series
-----------------
2
3
4
(3 rows)
SELECT * FROM generate_series(5,1,-2);
generate_series
-----------------
5
3
1
(3 rows)
SELECT * FROM generate_series(4,3);
generate_series
-----------------
(0 rows)
-- this example relies on the date-plus-integer operator
SELECT current_date + s.a AS dates FROM generate_series(0,14,7) AS s(a);
dates
------------
2004-02-05
2004-02-12
2004-02-19
(3 rows)
SELECT * FROM generate_series('2008-03-01 00:00'::timestamp,
'2008-03-04 12:00', '10 hours');
generate_series
---------------------
2008-03-01 00:00:00
2008-03-01 10:00:00
2008-03-01 20:00:00
2008-03-02 06:00:00
2008-03-02 16:00:00
2008-03-03 02:00:00
2008-03-03 12:00:00
2008-03-03 22:00:00
2008-03-04 08:00:00
(9 rows)
SELECT generate_series('2020-01-01'::date,
'2020-12-31'::date, '1 months');
generate_series
-------------------------
2020-01-01 00:00:00.000000
2020-02-01 00:00:00.000000
2020-03-01 00:00:00.000000
2020-04-01 00:00:00.000000
2020-05-01 00:00:00.000000
2020-06-01 00:00:00.000000
2020-07-01 00:00:00.000000
2020-08-01 00:00:00.000000
2020-09-01 00:00:00.000000
2020-10-01 00:00:00.000000
2020-11-01 00:00:00.000000
2020-12-01 00:00:00.000000