과제1. EXTRACT 함수의 결과 데이터 타입이 무엇인지 오라클 매뉴얼을 검색하여 설명 하십시요
자료: 여기
Purpose
EXTRACT extracts and returns the value of a specified datetime field from a datetime or interval value expression. When you extract a TIMEZONE_REGION or TIMEZONE_ABBR (abbreviation), the value returned is a string containing the appropriate time zone name or abbreviation. When you extract any of the other values, the value returned is in the Gregorian calendar. When extracting from a datetime with a time zone value, the value returned is in UTC. For a listing of time zone names and their corresponding abbreviations, query the V$TIMEZONE_NAMES dynamic performance view.
정리
-TIMEZONE_REGION or TIMEZONE_ABBR => STRING ...문자형 (참고)
TIME ZONES 참고
-any of the other values => Gregorian calendar (calender type 참고) ...날짜형 (그레고리 달력: 오늘날 기독교 국가를 비롯한 대부분의 국가는 이 달력을 사용하고 있다.) XXX 숫자형임???
-datetime with a time zone value => UTC(참고) ...날짜형 (UTC: 협정세계시...세계 공통으로 사용하고 있는 표준시)
XXX숫자형임???
-수정!!! (참고)
When you specify TIMEZONE_REGION or TIMEZONE_ABBR (abbreviation), the value returned is a VARCHAR2 string containing the appropriate time zone region name or abbreviation. When you specify any of the other datetime fields, the value returned is an integer value of NUMBER data type representing the datetime value in the Gregorian calendar. When extracting from a datetime with a time zone value, the value returned is in UTC. For a listing of time zone region names and their corresponding abbreviations, query the V$TIMEZONE_NAMES dynamic performance view.
과제2. 날짜 포맷을 조사하여 암기 후 설명
- 년
YYYY: 년도를 4자리로 표시(2020)
YYY: 년도의 앞 3자리만 표시(020)
YY: 년도의 앞 2자리만 표시(20) (*년도를 인식하는 기준이, 모두 현재 세기 기준)
Y, y: 년도의 앞 1자리만 표시(0)
RRRR: 년도를 4자리로 표시(2020)
RR: 년도의 앞 2자리만 표시(20) (*년도를 인식하는 기준이, 50을 기준으로 현 세기/전 세기/다음 세기로 구분해서 인식)
YEAR, year: 년도를 영어식으로 표시(TWNETY TWENTY | twenty twenty)
cf) rr의 활용 (참고)
현재 년도가 0~49 인데... 입력 년도가 0~49 => 현재 세기
입력 연도가 50~99 => 이전 세기
현재 년도가 50~99 인데... 입력 년도가 0~49 => 다음 세기
입력 년도가 50~99 => 현재 세기
현재 세기 범위와 입력 년도 범위가 같으면 => 현재 세기
다르면...'이전 세기' 혹은 '다음 세기'
- 월
MM, mm: 몇 월인 지 숫자로만 표기(01~12) (대소문자 구분 없음)
MON, mon: 몇 월인 지 '#월'로 표기(1월~12월) (대소문자 구분 없음)
MONTH, month: Mon과 같은 기능 (대소문자 구분 없음)
- 일
D, d: 일주일 중 몇 번째 일인 지 표시 (일~토 = 1~7) (대소문자 구분 없음)
DD, dd: 월 중 몇 일인 지 표시 (대소문자 구분 없음)
DDD, ddd: 년 중 몇 번재 일인지 표시 (대소문자 구분 없음)
DAY, day: 무슨 요일인 지 표시 (일요일~토요일)
DY, dy: '요일' 표시 제외 무슨 요일인 지 표시 (일~토)
- 시간
PM: 오전/오후 표시
AM: 오전/오후 표시
HH: 시간을 0~12시로 표시
HH12: 시간을 0~12시로 표시
HH24: 시간을 0~24시로 표시
- 분
MI: 몇 분인 지 표시
- 초
SS: 몇 초인 지(0∼59)
SSSSS: 자정부터 지금까지 지난 초
FF[1..9]: 밀리초 (표시할 자리 수 지정) (날짜형식을 SYSTIMESTAMP로 해야 사용가능)
- 공백
FM: 날짜 표기에서 공백을 표시하지 않음 (MM => 05 | fmMM => 5)
과제3. 아래 SQL을 참고하여 해당월의 마지막 법정 영업일자를 구하는 SQL을 작성 하십시요(법정 영업일은 월~금요일)
SELECT TO_CHAR(SYSDATE,'DDD'),
TO_CHAR(SYSDATE,'DD'),
TO_CHAR(SYSDATE,'D')
FROM DUAL;
SELECT LAST_DAY(SYSDATE) FROM DUAL;
답
-- 현재 달 기준
SELECT SYSDATE, CASE
WHEN TO_CHAR(LAST_DAY(SYSDATE),'D') = 1 THEN LAST_DAY(SYSDATE)-2
WHEN TO_CHAR(LAST_DAY(SYSDATE),'D') = 7 THEN LAST_DAY(SYSDATE)-1
ELSE LAST_DAY(SYSDATE)
END AS LAST_WORK_DAY
FROM DUAL;
-- 조회하고싶은 달 기준 (ADD_MONTHS +n 로 달을 설정한다.)
SELECT SYSDATE AS CURRENT_DATE, TO_CHAR(ADD_MONTHS(SYSDATE,5),'YYYY-MM') AS WANTED_DATE, TO_CHAR(EXTRACT(MONTH FROM ADD_MONTHS(SYSDATE,5))) AS WANTED_MONTH, CASE
WHEN TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE,5)),'D') = 1 THEN LAST_DAY(ADD_MONTHS(SYSDATE,5))-2
WHEN TO_CHAR(LAST_DAY(ADD_MONTHS(SYSDATE,5)),'D') = 7 THEN LAST_DAY(ADD_MONTHS(SYSDATE,5))-1
ELSE LAST_DAY(ADD_MONTHS(SYSDATE,5))
END AS LAST_WORK_DAY
FROM DUAL;
'내가 보려고 정리한 DB' 카테고리의 다른 글
[데이터베이스] JOIN - 1 (0) | 2020.05.13 |
---|---|
[데이터베이스] SEQUENCE - 1 (0) | 2020.05.12 |
[데이터베이스] SELECT - 2 (0) | 2020.05.08 |
[데이터베이스] SELECT - 1 (0) | 2020.05.07 |
[데이터베이스] 실습환경 구성 (0) | 2020.04.29 |