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을 찾아 주셔서 감사합니다. 공감 ♥ , 댓글이 큰 힘이 됩니다. |
'IT > SQL 기초강좌 (PostgreSQL)' 카테고리의 다른 글
49강 SQL 초석 다지기 : PostgreSQL UUID Data Type (24) | 2022.12.25 |
---|---|
48강 SQL 초석 다지기 : PostgreSQL TIME Data Type (3) | 2022.12.24 |
46강 SQL 초석 다지기 : PostgreSQL Timestamp Data Type (6) | 2022.12.24 |
45강 SQL 초석 다지기 : PostgreSQL DATE data type (4) | 2022.12.24 |
44강 SQL 초석 다지기 : PostgreSQL SERIAL (3) | 2022.12.23 |
댓글