All thing of the world!

Oracle EXTRACT 설명 : 오라클 함수 본문

IT/Oracle DBMS

Oracle EXTRACT 설명 : 오라클 함수

WorldSeeker 2021. 4. 6. 09:15

1. 함수의 목적 
  
    Oracle EXTRACT는 datetime 또는 interval 식에서 지정한 datetime 필드의 값을 추출하여 반환한다.

2. 샘플을 통한 개념 퀵뷰

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

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

3. 사용방법  


4. 함수 PARAMETER 설명

[expr]

datetime 또는 interval 데이터 유형으로 볼 수 있는 모든 표현식이 가능하다.

 YEAR 또는 MONTH가 요청되면 expr은 데이터 유형 DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP with LOCAL TIME ZONE 또는 INTERVAL YEAR TO MONTH의 표현식으로 평가되어야 한다.
 DAY가 요청되면 expr은 DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP with LOCAL TIME ZONE 또는 INTERVAL DAY TO SECOND의 표현식으로 평가되어야한다.
 HOUR, MINUTE 또는 SECOND가 요청되면 expr은 TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP with LOCAL TIME ZONE 또는 INTERVAL DAY TO SECOND의 표현식으로 평가되어야한다.
 TIMEZONE_HOUR, TIMEZONE_MINUTE, TIMEZONE_ABBR, TIMEZONE_REGION 또는 TIMEZONE_OFFSET이 요청되면 expr은 TIME ZONE 또는 TIMESTAMP LOCAL TIME ZONE 유형의 표현식으로 평가되어야한다.

EXTRACT 함수는 expr을 ANSI datetime 데이터 형식으로 해석한다. 예를 들어, EXTRACT는 시간요소 없이 DATE를 레거시 Oracle DATE가 아닌 ANSI DATE로 처리한다.
따라서 DATE 값에서 YEAR, MONTH 및 DAY 만 추출 할 수 있다. 마찬가지로 TIMESTAMP WITH TIME ZONE 유형에서만 TIMEZONE_HOUR 및 TIMEZONE_MINUTE를 추출 할 수 있다.

표현식이 애매할 경우 'UNKNOWN'을 반환한다.

5. 다양한 샘플표현

example1) oe스키마의 orders테이블 order_date 컬럼에서 달만 추출하여 grouping하고, 추출한 달에 오더를 받은 수를 카운트한다.

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";

example2) hr 스키마의 employees테이블에서 2007년 이후에 채용한 모든 사원을 조회한다.

SELECT last_name, employee_id, hire_date
  2  FROM employees
  3  WHERE EXTRACT(YEAR FROM hire_date) > 2007
  4  ORDER BY hire_date;

LAST_NAME                                          EMPLOYEE_ID HIRE_DAT
-------------------------------------------------- ----------- --------
Johnson                                                    179                 08/01/04
Grant                                                      199                   08/01/13
Marvins                                                    164                  08/01/24
Zlotkey                                                    149                   08/01/29
Geoni                                                      183                   08/02/03
Philtanker                                                 136                 08/02/06
Lee                                                        165                     08/02/23
Markle                                                     128                   08/03/08
Ande                                                       166                   08/03/24
Banda                                                      167                   08/04/21
Kumar                                                      173                   08/04/21
11 행이 선택되었습니다.


example3) 모호한 표현 때문에 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

위 식에서 시간대 오프셋(-08)은 주어져 있지만, 이 오프셋으로 둘 이상의 시간대 지역이름이 매핑될 수 있기 때문에 unknown이 반환된다.

 

Comments