본문 바로가기
오라클 게시판/오라클 함수

【오라클 SQL 함수】 EXTRACT (datetime) 함수

by 기서무나구물 2018. 11. 19.

포스팅 목차

    오라클 SQL 함수(Oracle SQL Function) 목록 리스트 링크

    o EXTRACT (datetime)

     


    문 법

     

    extract_datetime::=


    목 적

    EXTRACT 함수는 datetime 또는 구간 간격 표현식에서 사용자가 지정한 datetime 영역의 값을 추출하여 반환한다. 

    expr 인수에는 요청된 필드와 호환되는 datetime 또는 구간 간격 데이터 타입으로 평가되는 모든 표현식을 사용할 수 있다.

    - 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, or INTERVAL DAY TO SECOND  데이터 타입으로 평가되어야 한다.

    - HOUR, MINUTE 또는 SECOND를 요청한 경우, expr 인수는 TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE, or INTERVAL DAY TO SECOND. DATE 데이터 타입으로 평가되어야 한다. DATE 타입은 Oracle 데이터베이스에서 시간 필드가 없는 ANSI DATE 데이터 타입으로 처리되기 때문에 여기서는 유효하지 않는다.

    - TIMEZONE_HOUR, TIMEZONE_MINUTE, TIMEZONE_ABBR, TIMEZONE_REGION 또는 TIMEZONE_OFFSET 를 요청한 경우, expr 인수는 TIMESTAMP WITH TIME ZONE 또는 TIMESTAMP WITH 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 만을 추출할 수 있다.

    TIMEZONE_REGION 또는 TIMEZONE_ABBR(약어)을 지정하는 경우, 반환되는 값은 해당 표준 시간대(time zone) 지역 이름 또는 약어가 포함된 VARCHAR2 문자열이다. 다른 datatime 필드를 지정하면 반환되는 값은 그레고리력(태양력, Gregorian calendar)에서 datetime 값을 나타내는 NUMBER 데이터 타입의 정수 값이다. 표준 시간대 값이 포함되어 있는 datetime에서 추출할 때 반환되는 값은 시간대 일관성을 위해 UTC(협정 세계시)로 표현된다.추출된 값은 모호성을 방지하고 서로 다른 시간대 간의 비교를 용이하게 하기 위해 항상 범용 표준인 UTC로 정규화된다. 시간대 지역 이름과 그에 상응하는 약어 목록을 확인하기 위해서는 V$TIMEZONE_NAMES 동적 성능 뷰를 조회하여 확인할 수 있다.

    이 함수는 아래 첫 번째 예제와 같이 매우 큰 테이블에서 datetime 필드 값을 조작할 때 매우 유용할 수 있다.

     

    Note:

    서머타임 기능을 사용하기 위해서는 표준 시간대 지역 이름이 필요하다. 이 이름은 두 가지 유형의 시간대 파일에 저장된다. 이 파일은 큰 파일과 작은 파일로 구성된다. 이 파일 중 하나가 기본 파일이며, 사용 중인 환경과 Oracle 데이터베이스의 버젼에 따라 다르다. 표준 시간대 파일 및 이름에 대한 자세한 내용은 Oracle Database Globalization Support Guide를 참조.

    datetime 필드와 datetime 또는 구간 간격(interval) 값의 표현식을 결합하여 사용한 경우 일부 조합은 모호한 결과를 초래한다.


    참 고  - Oracle, Pandas, R Prog, Dplyr, Sqldf, Pandasql, Data.Table

     


    예 제

    다음 예제는 일자에서 연도에 해당하는 1998년을 반환한다.

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

     

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

     


    다음 예제는 hr.employees 테이블에서 1998년 이후에 고용된 모든 직원의 정보를 추출한다.

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

     

    Results
    LAST_NAME                 EMPLOYEE_ID HIRE_DATE
    ------------------------- ----------- ---------
    Landry                            127 14-JAN-99
    Lorentz                           107 07-FEB-99
    Cabrio                            187 07-FEB-99
    . . .

     


    다음 예제는 결과가 모호하기 때문에 오라클은 UNKNOWN을 반환한다.

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

     

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

    표현식에 표준 시간대 숫자 오프셋이 제공되고 해당 숫자 오프셋이 여러 표준 시간대 지역 이름에 매핑될 수 있기 때문에 결과가 모호해진다.

     


     

    SQL 첫걸음

    COUPANG

    www.coupang.com

     

     

    오라클 SQL 함수(Oracle SQL Function) 목록 리스트 링크

     

    [SQL, Pandas, R Prog, Dplyr, SQLDF, PANDASQL, DATA.TABLE] SQL EMP 예제로 만나는 테이블 데이터 처리 방법 리스트 링크

    2024.01 수정

    반응형

    댓글