[SQL 02 ] SQL 활용 -
학습목표
EXTRACT
Oracle EXTRACT()함수는 날짜 시간 또는 간격 값에서 특정 구성 요소 (년, 월, 일,시, 분, 초 등)를 추출합니다.
Argument
1) field
field 인수는 추출할 요소를 지정한다.
2) source
source 인수는 DATE, INTERVAL, TIMESTAM 값을 필드에서 추출한다.
Value Type | Available Fields |
---|---|
DATE | YEAR, MONTH, DAY |
INTERVAL YEAR TO MONTH | YEAR, MONTH |
INTERVAL DAY TO SECOND | DAY, HOUR, MINUTE, SECOND |
TIMESTAMP | YEAR, MONTH, DAY, HOUR, MINUTE, SECOND |
A) DATE 값에서 필드 추출
/* 연도 추출 */
SELECT
EXTRACT ( YEAR FROM TO_DATE( '31-Dec-1999 15:30:20',
'DD-Mon-YYYY HH24:MI:SS' ) ) YEAR
FROM DUAL;
/* 월 추출 */
SELECT
EXTRACT( MONTH FROM TO_DATE( '31-Dec-1999 15:30:20 ',
'DD-Mon-YYYY HH24:MI:SS' ) ) MONTH
FROM DUAL;
/* 일 추출 */
SELECT
EXTRACT( DAY FROM TO_DATE( '31-Dec-1999 15:30:20 ',
'DD-Mon-YYYY HH24:MI:SS' ) ) DAY
FROM DUAL;
실행결과
/* 연도 추출*/
1990
/* 월 추출*/
12
/* 일 추출*/
31
/* 현재 시스템 날짜의 시, 분, 초 추출*/
SELECT
TO_CHAR( SYSDATE, 'HH24' ) hour,
TO_CHAR( SYSDATE, 'MI' ) minute,
TO_CHAR( SYSDATE, 'SS' ) second
FROM
DUAL;
실행결과
21 08 45
B) INTERVAL YEAR TO MONTH
YEAR 및 MONTH 필드만 추출 가능하다.
/* 연도 출력*/
SELECT
EXTRACT( YEAR FROM INTERVAL '5-2' YEAR TO MONTH ) /*'5-2'는 5년 2개월이라는 필드값*/
FROM
DUAL;
/* 월 출력*/
SELECT
EXTRACT( MONTH FROM INTERVAL '5-2' YEAR TO MONTH )
FROM
DUAL;
실행결과
5
2
C) INTERVAL DAT TO SECOND값에서 필드 추출
DAY, HOUR, MINUTE, SECOND를 추출한다.
SELECT
EXTRACT( [ DAY / HOUR / MINUTE FROM INTERVAL '5 04:30:20.11' DAY TO SECOND )
FROM
dual;
실행결과
5
3
43
20.11
TIMESTAMP 값에서 필드 추출
다음 예와 같이 YEAR, MONTH, DAY, HOUR, MINUTE 및 SECOND를 값에서 추출 할 수 있다.
SELECT
EXTRACT( YEAR FROM TIMESTAMP '1999-12-31 23:59:59.10' )
EXTRACT( MONTH FROM TIMESTAMP '1999-12-31 23:59:59.10' )
EXTRACT( DAY FROM TIMESTAMP '1999-12-31 23:59:59.10' )
EXTRACT( HOUR FROM TIMESTAMP '1999-12-31 23:59:59.10' )
EXTRACT( MINUTE FROM TIMESTAMP '1999-12-31 23:59:59.10' )
EXTRACT( SECOND FROM TIMESTAMP '1999-12-31 23:59:59.10' )
FROM
dual;
실행결과
1999 12 31 23 59 59.10
E) 테이블 데이터에서 날짜 구성 요소 추출
EXTRACT() 함수를 사용하여 HIREDATE에서 연도와 월을 추출하고 해당 입사일인 사원수를 리턴한다.
SELECT
EXTRACT(year FROM HIREDATE) year,
EXTRACT(month FROM HIREDATE) month,
COUNT(EMPNO)
FROM EMP
GROUP BY
EXTRACT(YEAR FROM HIREDATE),
EXTRACT(MONTH FROM HIREDATE)
ORDER BY year DESC, month;
F) 사용자 입력에서 날짜 추출
SELECT
EXTRACT(YEAR FROM TO_DATE(:input_date,'yyyymmdd')) year,
EXTRACT(MONTH FROM TO_DATE(:input_date,'yyyymmdd')) month,
EXTRACT(DAY FROM TO_DATE(:input_date,'yyyymmdd')) day
FROM dual;
댓글남기기