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

댓글남기기