[PostgreSQL] 날짜 & 시간 생성하기(generate_series)

[PostgreSQL] 날짜 & 시간 생성하기(generate_series)

제가 PostgreSql 에서 가장 잘 사용하고 있는 function 중 하나는 generate_series 입니다!

Function Argument Type Return Type Description
generate_series
(start, stop)
int or bigint (same as argument type) 1의 단위로 증감합니다
generate_series
(start, stop, step)
int or bigint (same as argument type) step에서 설정한 단위로 증감합니다
generate_series
(start, stop, step interval)
timestamp or timestamp with time zone (same as argument type) step에서 설정한 단위로 증감합니다

간단한 예시들

generate_series 기본적인 예시를 아래에서 확인하시죠.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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('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 'R'|| right('0' || line_value, 2) as line
from generate_series(5, 18) as tbl(line_value);
line
----------
R01
R02
R03
R04
R05
R06
R07
R08
R09
R10
R11
R12
R13
R14
R15
R16
R17
R18
(18 rows)

시간 & 날짜 데이터 생성하기

위에서 SELECT * FROM generate_series('2008-03-01 00:00'::timestamp,'2008-03-04 12:00', '10 hours'); 쿼리를 통해 시간 데이터를 생성하였으나 원하는 값이 월-일 시:분 데이터 형식이면 아래의 쿼리를 사용하면 됩니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT
to_char(generate_series('2008-03-01 00:00'::timestamp,'2008-03-04 12:00', '10 hours'), 'MM-dd hh:mi') as gtime;

gtime
------------
03-01 12:00
03-01 10:00
03-01 08:00
03-02 06:00
03-02 04:00
03-03 02:00
03-03 12:00
03-03 10:00
03-04 08:00
(9 rows)

to_char에서 사용하는 Date/Time 포멧

위에서 사용하는 to_char함수에서 자주 사용되는 Date/Time 포멧을 더 자세하게 알아보자면 아래와 같습니다.
모든 포멧을 알고 싶다면 to_char 자세히를 클릭하시면 됩니다.

원하는 포멧에 맞추에 to_char(now(), 'YYYY-MM-DD HH:MI:SS') 같이 원하는 형식으로 변경하여 사용할 수 있습니다~

Pattern Description 설명
HH hour of day
(01-12)
하루의 시간
(01-12)
HH12 hour of day
(01-12)
하루의 시간
(01-12)
HH24 hour of day
(00-23)
하루의 시간
(00-23)
MI minute
(00-59)

(00-59)
SS second
(00-59)

(00-59)
MS millisecond
(000-999)
밀리초
(000-999)
US microsecond
(000000-999999)
마이크로초
(000000-999999)
AM, am, PM or pm meridiem indicator
(without periods)
정오 표기
(마침표 없이)
A.M., a.m., P.M. or p.m. meridiem indicator
(with periods)
정오 표기
(마침표 포함)
Y,YYY year
(4 or more digits)
with comma
컴마와 연도
(4 또는 그 이상의 숫자)
YYYY year
(4 or more digits)
연도
(4 또는 그 이상의 숫자)
YYY last 3 digits of year 연도의 마지막
3자리 숫자
YY last 2 digits of year 연도의 마지막
2자리 숫자
Y last digit of year 연도의 마지막
1자리 숫자
MM month number
(01-12)
달의 숫자
(01-12)
DD day of month
(01-31)
일의 숫자
(01-31)

Reference

Share