본문 바로가기
IT/SQL 기초강좌 (PostgreSQL)

47강 SQL 초석 다지기 : PostgreSQL interval Data Type

by DoitSQL 2022. 12. 24.
728x90

47강 SQL 초석 다지기 : PostgreSQL interval Data Type   

PostgreSQL

SQL 초석 다지기 47강 시작합니다.

본 강의는 PostgreSQL Tutorial을 참조합니다.  https://www.postgresqltutorial.com/

이번 시간에는

 PostgreSQL interval Data Type

에 대해서 알아보는 시간입니다.

 

PostgreSQL interval 데이터 유형과 interval 값을 조작하는 방법에 대해 알아봅니다.


Introduction to PostgreSQL interval data type   

interval 데이터 유형을 사용하면 년, 월, 일, 시간, 분, 초 등의 기간을 저장하고 조작할 수 있습니다. 다음은 간격 유형을 보여 줍니다.

@ interval [ fields ] [ (p) ]   

 

interval 값을 사용하려면 허용되는 범위가 -178,000,000년에서 17,800,000,000년인 기간을 저장할 수 있는 16바이트 스토리지 크기가 필요합니다.

또한, interval 값은 허용 범위가 0 내지 6인 임의의 정밀도 값 p를 가질 수 있다. 정밀도 p는 두 번째 필드에 유지되는 분수 자릿수입니다.

at 기호(@)는 선택 사항이므로 생략할 수 있습니다.

다음 예제에서는 일부 구간 값을 보여 줍니다.

interval '2 months ago';
interval '3 hours 20 minutes'; 

 

내부적으로, PostgreSQL은 interval 값을 월, 일 및 초로 저장합니다. 월 및 일 값은 정수이지만 초 필드에는 분수가 있을 수 있습니다.

interval 값은 날짜 또는 시간 계산을 수행할 때 매우 유용합니다. 예를 들어, 3시간 2분 전의 시간을 작년 현재 시간으로 알고 싶다면 다음 문장을 사용할 수 있습니다.

SELECT
    now(),
    now() - INTERVAL '1 year 3 hours 20 minutes' 
             AS "3 hours 20 minutes ago of last year";


PostgreSQL interval input format   

입력 및 출력의 interval 값 형식을 지정하는 방법을 알아보겠습니다.

 

PostgreSQL은 다음과 같은 상세 구문을 제공하여 간격 값을 기록합니다.

quantity unit [quantity unit...] [direction] 

 

quantity는 숫자이며 기호 + 또는 -도 사용할 수 있습니다.
● unit 은 밀레니엄, 세기, 10년, 년, 월, 주, 일, 시, 분, 초, 밀리초, 마이크로초 또는 약어(y, m, d 등) 또는 복수 형식(일, 일 등) 일 수 있습니다.
● direction은 이전 또는 빈 문자열 '  '일 수 있습니다.

 

이 형식을 postgres_verbose라고 하며 interval 출력 형식에도 사용됩니다. 다음 예제에서는 상세 구문을 사용하는 일부 interval 값을 보여 줍니다.

INTERVAL '1 year 2 months 3 days';
INTERVAL '2 weeks ago'; 


ISO 8601 interval format

PostgreSQL을 사용하면 위의 상세 구문 외에도 ISO 8601 시간 간격을 사용하여 지정자를 사용한 형식과 대체 형식의 두 가지 방법으로 간격 값을 작성할 수 있습니다.

ISO 8601 포맷은 다음과 같다:

P quantity unit [ quantity unit ...] [ T [ quantity unit ...]] 

 

이 형식에서 간격 값은 문자 P로 시작해야 합니다. 문자 T는 시간 단위를 결정하기 위한 것이다.

다음 표에는 ISO 8601 간격 단위 약어가 나와 있습니다.

약어 설명
Y Years
M Months (in the date part)
W Weeks
D Days
H Hours
M Minutes (in the time part)
S Seconds

M은 문자 T의 앞 또는 뒤에 나타나는지에 따라 월 또는 분이 될 수 있다.

예를 들어, 6년 5개월 4일 3시간 2분 1초의 간격은 다음과 같이 ISO 8601 지정자 형식으로 작성할 수 있습니다.

P6Y5M4DT3H2M1S  

 

ISO 8601의 다른 형태는 다음과 같다:

P [ years-months-days ] [ T hours:minutes:seconds ] 

문자 P로 시작해야 하며 문자 T는 간격 값의 날짜 및 시간 부분을 구분합니다. 예를 들어, 6년 5개월 4일 3시간 2분 1초의 간격은 ISO 8601 대체 형식

SELECT   

으로 다음과 같이 쓸 수 있다.

P0006-05-04T03:02:01 

이 방식이 좀 더 직관적이네요.


PostgreSQL interval output format

interval 값의 출력 스타일은 다음과 같이 SET intervalstyle 명령을 사용하여 설정합니다.

SET intervalstyle = 'sql_standard'; 

 

PostgreSQL은 4가지 출력 형식을 제공한다: 

sql standard, postgres, postgresverbose, iso_8601. postgresSQL은 기본적으로 간격 값의 형식을 지정하기 위해 postgres 스타일을 사용합니다.

다음은 4가지 스타일에서 6년 5개월 4일 3시간 2분 1초의 간격을 나타낸다:

SET intervalstyle = 'sql_standard';

SELECT
INTERVAL '6 years 5 months 4 days 3 hours 2 minutes 1 second';

 

SET intervalstyle = 'postgres';

SELECT
INTERVAL '6 years 5 months 4 days 3 hours 2 minutes 1 second';


SET intervalstyle = 'postgres_verbose';

SELECT
INTERVAL '6 years 5 months 4 days 3 hours 2 minutes 1 second';


SET intervalstyle = 'iso_8601';

SELECT
INTERVAL '6 years 5 months 4 days 3 hours 2 minutes 1 second';  


PostgreSQL interval related operators and functions   

 

Interval operators   

다음과 같이 산술 연산자(+, -, * 등)를 구간 값에 적용할 수 있습니다.

SELECT
INTERVAL '2h 50m' + INTERVAL '10m'; -- 03:00:00

SELECT
INTERVAL '2h 50m' - INTERVAL '50m'; -- 02:00:00

SELECT
600 * INTERVAL '1 minute'; -- 10:00:00 

 

Converting PostgreSQL interval to string   

interval  값을 문자열로 변환하려면 TO_CHAR() 함수를 사용합니다.

TO_CHAR(interval,format) 

 

TO_CHAR() 함수는 첫 번째 인수를 간격 값으로, 두 번째 인수를 형식으로 사용하고 지정된 형식으로 간격을 나타내는 문자열을 반환합니다.

다음 예를 참조하십시오.

SELECT
    TO_CHAR(
        INTERVAL '17h 20m 05s',
        'HH24:MI:SS'
    ); 

 

Extracting data from a PostgreSQL interval   

interval에서 연도, 월, 날짜 등의 필드를 추출하려면 EXTRACT() 함수를 사용합니다.

EXTRACT(field FROM interval)   

 

필드는 간격에서 추출할 연도, 월, 날짜, 시간, 분 등이 될 수 있습니다. 추출 함수는 두 배 정밀도 유형의 값을 반환합니다.

다음 예를 참조하십시오.

SELECT
    EXTRACT (
        MINUTE
        FROM
            INTERVAL '5 hours 21 minutes'
    ); 

 

Adjusting interval values   

PostgreSQL은 30일 간격을 한 달로, 24시간 간격을 하루로 조정할 수 있는 두 가지 기능을 제공합니다.

SELECT
    justify_days(INTERVAL '30 days'),
    justify_hours(INTERVAL '24 hours'); 

 

또한 justify_interval 함수는 justifydays와 justifyhours을 사용하여 간격을 조정하고 추가 부호 조정으로 시간을 정당화합니다.

SELECT
    justify_interval(interval '1 year -1 hour');


오늘 강의는 PostgreSQL 구간 데이터 유형과 구간 값을 조작하는 방법에 대해 배웠습니다.

 

다음 시간에 만나요.


Do it! SQL을 찾아 주셔서 감사합니다. 공감 ♥ , 댓글이 큰 힘이 됩니다.

 

728x90

댓글