Syntax
Purpose
오라클 EXTRACT 함수는 단어 뜻 그대로 일자정보에서 년도, 월, 일과 같은 특정 내용을 발췌하는 함수입니다. 상단 Syntax에 보면 날짜정보를 가진 expr 에서 년도, 월, 일, 시간, 분, 초 등을 추출해 낼 수 있습니다.
YEAR : 년도
MONTH : 월
DAY : 일
HOUR : 시간
MINUTE : 분
SECOND : 초
TIMEZONE_HOUR : TIMEZONE형의 시간
TIMEZONE_MINUTE :TIMEZONE형의 분
TIMEZONE_REGION : TIMEZONE의 지역
TIMEZONE_ABBR : TIMEZONE 지역에 대한 약어
여기서 주의할 점은 YEAR, MONTH, DAY 를 추출할 때는 expr에 DATE형이나, TIMESTAMP형등 어떤값이 와도 되지만, HOUR, MINUTE, SECOND 등의 시간정보가 필요할때는 꼭 TIMESTAMP형이 와야된다는 것입니다. 어떻게 보면 당연하죠. TIMESTAMP형에는 시간정보가 항상 있지만, DATE형에는 시간정보가 없을 수도 있으니까요.
그리고 앞에 TIMEZONE이 붙은 TIMEZONE_HOUR, TIMEZONE_MINUTE, TIMEZONE_REGION, TIMEZONE_ABBR을 추출하기 위해서는 expr에 TIMESTAMP WITH TIMEZONE 이나 TIMESTAMP WITH LOCAL TIMEZONE 형이 와야된다는 것입니다. 이것 역시 TIMEZONE 값을 추출하기 위해서는 TIMEZONE형이 와야된다고 생각하시면 되겠네요.
Examples
아래 예제는 SYSDATE에서 년도, 월, 일을 추출하는 예제입니다. 문제없이 잘 됩니다.
그런데 SYSDATE에서 아래와 같이 시간, 분, 초를 추출하려고 하면 에러가 발생합니다. 앞서 말씀드렸듯이 SYSDATE는 DATE형이기때문에 시간이 있을수도 있고 없을 수도 있기 때문이죠.
SYSTIMESTAMP에는 시간, 분, 초 정보가 항상 있기때문에 아래와 같이 추출이 가능합니다.
근데, SYSTIMESTAMP에 보듯이 지금시간이 17:58:08 인데, 시간을 추출한 값이 '8'로 나오네요. 여기저기 찾아봤는데, 왜 그런지 못찾았습니다. 시간을 내서 좀 더 살펴봐야 할 부분인것 같습니다.
TIMEZONE과 관련된 값을 추출하려면 아래와 같이 시행하면 됩니다. 지역정보와 지역약어 정보는 UNKOWN이 나타나네요. 첨에 약어가 'UNK'로 나타나길래 United Kingdom 으로 정확하게 나오는줄 알았네요 ;;
모호한 값을 주면 UNKOWN을 리턴한다는데, 어떤값을 모호하게줬는지 모르겠습니다. 이것도 차후에 좀 더 알아봐야겠습니다.
TIMEZONE_REGION과 TIMEZONE_ABBR의 리턴값은 V$TIMEZONE_NAMES 뷰를 이용한다고 합니다. 뷰를 조회해보니 아래와 같이 나옵니다.
TIMEZONE 이 들어가면 좀 긴장을 합니다. 아직 제대로 개념을 못잡아서 그렇네요. 그 부분을 더 살펴봐야 될것 같습니다. 아리송한 부분을 파악하고 나면 블로그도 업데이트 하도록 하겠습니다.
참고사이트
http://docs.oracle.com/cd/E11882_01/server.112/e41084/functions059.htm#SQLRF00639
'IT' 카테고리의 다른 글
[오라클/함수] 두 날짜 사이의 월 수 구하기 MONTHS_BETWEEN (0) | 2017.01.20 |
---|---|
[오라클/함수] 해당 월의 마지막 날짜 구하기 LAST_DAY (0) | 2016.12.30 |
[오라클/함수] 현재 일자 구하기 CURRENT_DATE | SYSDATE와 차이점 (0) | 2016.12.19 |
[오라클/함수] 개월 수 더하기 ADD_MONTHS 함수 (0) | 2016.12.16 |
[오라클/함수] 문자열 길이 구하기 LENGTH 함수 (0) | 2016.12.15 |