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를 요청한 경우, 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 데이터 유형으로 평가되어야 합니다. DATE는 여기서 유효하지 않습니다. Oracle Database는 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 (약어)를 지정하는 경우 반환되는 값은 해당하는 타임존 지역 이름 또는 약어를 포함하는 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을 반환합니다 (추가 정보는 아래의 예를 참조하세요).
참고:
- Oracle Database Globalization Support Guide에서 두 파일 모두에 포함된 시간대 지역 이름의 전체 목록을 확인하세요.
- Oracle Database Globalization Support Guide의 Appendix C에서 EXTRACT의 문자 반환 값에 할당되는 정렬 파생 규칙에 대한 정보를 확인하세요.
- Datetime/Interval Arithmetic에서 datetime_value_expr 및 interval_value_expr에 대한 설명을 참조하세요.
- Oracle Database Reference에서 동적 성능 뷰에 대한 정보를 확인하세요.
예제
다음 예제는 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) 함수 문서
'코딩 > 오라클 함수' 카테고리의 다른 글
[오라클 레퍼런스 함수] EXTRACTVALUE - XML 노드의 스칼라 값 추출 (0) | 2023.08.05 |
---|---|
[오라클 레퍼런스 함수] EXTRACT (XML) - XML 데이터 조각(fragment) 추출 (0) | 2023.08.04 |
[오라클 레퍼런스 함수] EXP - e (자연상수)를 n 제곱한 값 반환 (0) | 2023.08.04 |
[오라클 레퍼런스 함수] EXISTSNODE - XML 문서 탐색 시 노드 존재 여부 반환 (0) | 2023.08.04 |
[오라클 레퍼런스 함수] EMPTY_BLOB, EMPTY_CLOB - 비어 있는 LOB locator 반환 (0) | 2023.08.04 |
댓글