본문 바로가기

[오라클 레퍼런스 함수] EXTRACT (datetime) - 날짜 및 시간 필드 추출

by ㅇㅍㅍ 2023. 8. 4.
[오라클 레퍼런스 함수] EXTRACT (datetime) - 날짜 및 시간 필드 추출
728x90

EXTRACT (datetime)

 

구문

EXTRACT( { YEAR
         | MONTH
         | DAY
         | HOUR
         | MINUTE
         | SECOND
         | TIMEZONE_HOUR
         | TIMEZONE_MINUTE
         | TIMEZONE_REGION
         | TIMEZONE_ABBR
         }
         FROM { expr }
       )

 

목적

EXTRACT 함수는 지정된 datetime 필드의 값을 datetime 또는 interval 표현식에서 추출하고 반환합니다. expr은 요청된 필드와 호환되는 datetime 또는 interval 데이터 유형으로 평가되는 모든 표현식을 사용할 수 있습니다:

 

  • YEAR 또는 MONTH를 요청한 경우, exprDATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE 또는 INTERVAL YEAR TO MONTH 데이터 유형으로 평가되어야 합니다.
  • DAY를 요청한 경우, exprDATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE 또는 INTERVAL DAY TO SECOND 데이터 유형으로 평가되어야 합니다.
  • HOUR, MINUTE 또는 SECOND를 요청한 경우, exprTIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE 또는 INTERVAL DAY TO SECOND 데이터 유형으로 평가되어야 합니다. DATE는 여기서 유효하지 않습니다. Oracle Database는 ANSI DATE 데이터 유형으로 처리하며 시간 필드가 없습니다.
  • TIMEZONE_HOUR, TIMEZONE_MINUTE, TIMEZONE_ABBR, TIMEZONE_REGION 또는 TIMEZONE_OFFSET을 요청한 경우, exprTIMESTAMP WITH TIME ZONE 또는 TIMESTAMP WITH LOCAL TIME ZONE 데이터 유형으로 평가되어야 합니다.

 

EXTRACT 함수는 expr을 ANSI datetime 데이터 유형으로 해석합니다. 예를 들어, EXTRACTDATE를 레거시 Oracle DATE가 아닌 ANSI DATE 처리하며 시간 요소가 없습니다. 따라서 DATE 값을 사용하여 YEAR, MONTHDAY만 추출할 수 있습니다. 마찬가지로 TIMESTAMP WITH TIME ZONE 데이터 유형에서는 TIMEZONE_HOURTIMEZONE_MINUTE만 추출할 수 있습니다.

TIMEZONE_REGION 또는 TIMEZONE_ABBR (약어)를 지정하는 경우 반환되는 값은 해당하는 타임존 지역 이름 또는 약어를 포함하는 VARCHAR2 문자열입니다. 다른 날짜 및 시간 필드를 지정하는 경우 반환되는 값은 그레고리오력(Gregorian calendar)에서 날짜 및 시간 값을 나타내는 NUMBER 데이터 유형의 정수 값입니다. 시간대 값이 있는 datetime에서 추출할 때 반환되는 값은 UTC 기준입니다. 시간대 지역 이름과 해당하는 약어 목록은 V$TIMEZONE_NAMES 동적 성능 뷰를 조회하여 확인할 수 있습니다.

아래 첫 번째 예제에서 보여주듯이, 이 함수는 매우 큰 테이블에서 datetime 필드 값을 조작하는 데 매우 유용할 수 있습니다.

 

노트: 타임존 지역 이름(Time zone region names)은 일광 절약 기능(daylight saving feature)에서 필요합니다. 이러한 이름들은 두 종류의 타임존 파일에 저장됩니다: 큰 파일과 작은 파일이 있습니다. 이 파일 중 하나는 기본 파일이며, 환경과 사용 중인 Oracle Database 버전에 따라 다릅니다. 타임존 파일 및 이름에 대한 자세한 정보는 Oracle Database Globalization Support Guide를 참조하십시오.

 

일부 datetime 필드와 datetime 또는 interval 값 표현의 조합은 모호성을 초래할 수 있습니다. 이러한 경우 Oracle Database는 UNKNOWN을 반환합니다 (추가 정보는 아래의 예를 참조하세요).

 

참고:

 

예제

다음 예제는 oe.orders 테이블에서 각 월에 배치된 주문 수를 반환합니다.

SELECT EXTRACT(month FROM order_date) "Month", COUNT(order_date) "No. of Orders"
  FROM orders
  GROUP BY EXTRACT(month FROM order_date)
  ORDER BY "No. of Orders" DESC, "Month";

     Month No. of Orders
---------- -------------
        11            15
         6            14
         7            14
         3            11
         5            10
         2             9
         9             9
         8             7
        10             6
         1             5
        12             4
         4             1
 
12 rows selected.

 

다음 예제는 1998년을 반환합니다.

SELECT EXTRACT(YEAR FROM DATE '1998-03-07')
  FROM DUAL;

EXTRACT(YEARFROMDATE'1998-03-07')
---------------------------------
                             1998

 

다음 예제는 샘플 테이블 hr.employees에서 2007년 이후에 고용된 모든 직원들을 선택합니다.

SELECT last_name, employee_id, hire_date
  FROM employees
  WHERE EXTRACT(YEAR FROM (hire_date, 'DD-MON-RR')) > 2007
  ORDER BY hire_date;

LAST_NAME                 EMPLOYEE_ID HIRE_DATE
------------------------- ----------- ---------
Johnson                           179 04-JAN-08
Grant                             199 13-JAN-08
Marvins                           164 24-JAN-08
. . .

 

다음 예제는 모호성으로 인해 Oracle이 UNKNOWN을 반환합니다.

SELECT EXTRACT(TIMEZONE_REGION FROM TIMESTAMP '1999-01-01 10:00:00 -08:00')
  FROM DUAL;

EXTRACT(TIMEZONE_REGIONFROMTIMESTAMP'1999-01-0110:00:00-08:00')
----------------------------------------------------------------
UNKNOWN

 

모호성은 표현식에 시간대 숫자적 오프셋이 제공되었고 해당 숫자적 오프셋이 둘 이상의 시간대 지역 이름에 매핑될 수 있기 때문에 발생합니다.


출처: 오라클 레퍼런스

원문 링크: Oracle EXTRACT (datetime) 함수 문서

 

반응형

댓글