EXTRACT 함수 - Amazon Redshift

EXTRACT 함수

EXTRACT 함수는 TIMESTAMP, TIMESTAMPTZ, TIME, TIMETZ, INTERVAL YEAR TO MONTH 또는 INTERVAL DAY TO SECOND 값에서 날짜 또는 시간 부분을 반환합니다. 예에는 타임스탬프의 일, 월, 년, 시, 분, 초, 밀리초 또는 마이크로초가 포함됩니다.

구문

EXTRACT(datepart FROM source)

인수

datepart

일, 월, 년, 시, 분, 초, 밀리초 또는 마이크로초 등 추출할 날짜 또는 시간의 하위 필드입니다. 에 대해 가능한 값은 날짜 또는 타임스탬프 함수의 날짜 부분 섹션을 참조하세요.

source

TIMESTAMP, TIMESTAMPTZ, TIME, TIMETZ, INTERVAL YEAR TO MONTH 또는 INTERVAL DAY TO SECOND의 데이터 유형으로 평가되는 열 또는 표현식입니다.

반환 타입

source 값이 TIMESTAMP, TIME, TIMETZ, INTERVAL YEAR TO MONTH 또는 INTERVAL DAY TO SECOND의 데이터 유형으로 평가되는 경우 INTEGER입니다.

source 값이 TIMESTAMPTZ의 데이터 유형으로 평가되는 경우 DOUBLE PRECISION입니다.

TIMESTAMP를 사용한 예제

다음은 판매에서 지불 가격이 $10,000 이상이었던 주차 번호(week numbers)를 확인하는 예입니다. 이 예제에서는 TICKIT 데이터를 사용합니다. 자세한 내용은 샘플 데이터베이스 단원을 참조하십시오.

select salesid, extract(week from saletime) as weeknum from sales where pricepaid > 9999 order by 2; salesid | weeknum --------+--------- 159073 | 6 160318 | 8 161723 | 26

다음 예에서는 리터럴 타임스탬프 값에서 분 값을 반환합니다.

select extract(minute from timestamp '2009-09-09 12:08:43'); date_part ----------- 8

다음 예제에서는 리터럴 timestamp 값에서 밀리초 값을 반환합니다.

select extract(ms from timestamp '2009-09-09 12:08:43.101'); date_part ----------- 101

TIMESTAMPTZ를 사용한 예제

다음 예제에서는 리터럴 timestamptz 값에서 년 값을 반환합니다.

select extract(year from timestamptz '1.12.1997 07:37:16.00 PST'); date_part ----------- 1997

TIME을 사용한 예제

다음 예제 테이블 TIME_TEST에는 3개의 값이 삽입된 TIME_VAL(TIME 형식) 열이 있습니다.

select time_val from time_test; time_val --------------------- 20:00:00 00:00:00.5550 00:58:00

다음 예에서는 각 time_val에서 분을 추출합니다.

select extract(minute from time_val) as minutes from time_test; minutes ----------- 0 0 58

다음 예에서는 각 time_val에서 시간을 추출합니다.

select extract(hour from time_val) as hours from time_test; hours ----------- 20 0 0

다음 예에서는 리터럴 값에서 밀리초를 추출합니다.

select extract(ms from time '18:25:33.123456'); date_part ----------- 123

TIMETZ를 사용한 예제

다음 예제 테이블 TIMETZ_TEST에는 3개의 값이 삽입된 TIMETZ_VAL(TIMETZ 형식) 열이 있습니다.

select timetz_val from timetz_test; timetz_val ------------------ 04:00:00+00 00:00:00.5550+00 05:58:00+00

다음 예에서는 각 timetz_val에서 시간을 추출합니다.

select extract(hour from timetz_val) as hours from time_test; hours ----------- 4 0 5

다음 예에서는 리터럴 값에서 밀리초를 추출합니다. 추출이 처리되기 전에 리터럴은 UTC로 변환되지 않습니다.

select extract(ms from timetz '18:25:33.123456 EST'); date_part ----------- 123

다음 예제에서는 리터럴 timetz 값에서 UTC로부터의 시간대 오프셋 시간을 반환합니다.

select extract(timezone_hour from timetz '1.12.1997 07:37:16.00 PDT'); date_part ----------- -7

INTERVAL YEAR TO MONTH 및 INTERVAL DAY TO SECOND 예제

다음 예제에서는 36시간, 즉 1일 12시간을 정의하는 INTERVAL DAY TO SECOND에서 일 부분인 1을 추출합니다.

select EXTRACT('days' from INTERVAL '36 hours' DAY TO SECOND) date_part ------------------ 1

다음 예제에서는 15개월, 즉 1년 3개월을 정의하는 YEAR TO MONTH에서 월 부분인 3을 추출합니다.

select EXTRACT('month' from INTERVAL '15 months' YEAR TO MONTH) date_part ------------------ 3

다음 예제에서는 30개월, 즉 2년 6개월에서 월 부분인 6을 추출합니다.

select EXTRACT('month' from INTERVAL '30' MONTH) date_part ------------------ 6

다음 예제에서는 50시간, 즉 2일 2시간에서 시간 부분인 2를 추출합니다.

select EXTRACT('hours' from INTERVAL '50' HOUR) date_part ------------------ 2

다음 예제에서는 1시간 11분 11.123초에서 분 부분인 11을 추출합니다.

select EXTRACT('minute' from INTERVAL '70 minutes 70.123 seconds' MINUTE TO SECOND) date_part ------------------ 11

다음 예제에서는 1일 1시간 1분 1.11초에서 초 부분인 1.11을 추출합니다.

select EXTRACT('seconds' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) date_part ------------------ 1.11

다음 예제에서는 INTERVAL의 총 시간 수를 추출합니다. 각 부분이 추출되어 합계에 더해집니다.

select EXTRACT('days' from INTERVAL '50' HOUR) * 24 + EXTRACT('hours' from INTERVAL '50' HOUR) ?column? ------------------ 50

다음 예제에서는 INTERVAL의 총 초 수를 추출합니다. 각 부분이 추출되어 합계에 더해집니다.

select EXTRACT('days' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 86400 + EXTRACT('hours' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 3600 + EXTRACT('minutes' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) * 60 + EXTRACT('seconds' from INTERVAL '1 day 1:1:1.11' DAY TO SECOND) ?column? ------------------ 90061.11