2015. 7. 7. 15:51 Naver Blog 백업용
날짜함수(P.157)
- SYSDATE : 현재 날짜를 반환
- ROUND : 16일을 기준으로 반올림하는 함수
ex) SELECT HIREDATE, ROUND(HIREDATE,'MONTH') FROM EMP;
- TRUNC : 특정 기준으로 버리는 함수
- MONTHS_BETWEEN : 두 날짜 사이의 개월수를 구함
ex) 태어난 날짜로부터 지금까지의 개월수 구하기
SELECT MONTHS_BETWEEN('2015/7/7','1990/03/20') FROM DUAL;
- ADD_MONTHS : 개월 수를 더함
ex) 오늘날짜(SYSDATE)로부터 6개월 후 날짜
SELECT ADD_MONTHS(SYSDATE,6) FROM DUAL;
- NEXT_DAY : 해당 요일의 가장 가까운 날짜를 반환
ex) 가장 가까운 수요일의 날짜를 반환
SELECT NEXT_DAY(SYSDATE,'수요일') FROM DUAL;
문제
1. 오늘이 속한 달의 마지막 날짜와 다가오는 금요일의 날짜를 출력
SELECT LAST_DAY(SYSDATE),NEXT_DAY(SYSDATE,'금요일')
FROM DUAL;
2. 각 직원들이 입사한후 6개월이 지나면 근무평가를 하기로 한다. 각직원들에 대한 이름,입사일,최초의 근무평가일은 언제인지 구하고 근무평가일로부터 돌아오는 금요일의 날짜가 언제인지도 구하세요.
SELECT ENAME,HIREDATE,ADD_MONTHS(HIREDATE,6) AS "최초 근무평가일",
NEXT_DAY(ADD_MONTHS(HIREDATE,6),'금요일') AS "돌아오는 금요일"
FROM EMP;
3. 모든 사원에 대해 근무한 일수가 얼마인지 구하고 근무한 지 몇주가 지났는지 출력
또한 같은 근무주수가 많은 직원부터 나타내고,같은 근무주수가 있으면 이름에 대해서 오름차순으로 정렬하세요 (week명으로 필드명)
SELECT ENAME, SYSDATE-HIREDATE, (SYSDATE-HIREDATE)/7 AS WEEK
FROM EMP
ORDER BY TRUNC((SYSDATE-HIREDATE)/7) DESC, ENAME ASC;
SELECT ENAME, TRUNC(SYSDATE-HIREDATE), TRUNC((SYSDATE-HIREDATE)/7) AS WEEK
FROM EMP
ORDER BY WEEK DESC, ENAME ASC;
- WEEK로 ALIAS 했으므로 ORDER BY절에 WEEK 적용 가능
BUT WHERE절에서는 인식되는 시간이 달라서 적용 불가능
4. 현재 날짜 5일 뒤의 날짜와 5일 전의 날짜 출력
SELECT SYSDATE+5, SYSDATE, SYSDATE-5
FROM DUAL;
5. 근무한 지 280000 시간이 넘은 사원을 출력하시오.
SELECT ENAME, (SYSDATE-HIREDATE)*24 AS "근무시간"
FROM EMP
WHERE (SYSDATE-HIREDATE)*24 > 280000;
'DB > Oracle' 카테고리의 다른 글
[Oracle] 그룹함수 -1- (0) | 2021.05.07 |
---|---|
[Oracle ] SQL 주요함수 -3- (0) | 2021.05.07 |
[Oracle] SQL 주요함수 -1- (0) | 2021.05.07 |
[Oracle] 2015년 7월 7일 오전 10시 33분에 저장한 글입니다. (0) | 2021.05.07 |
[Oracle] ORACLE 11G 개요, 접속방법 (0) | 2021.05.07 |