본문으로 바로가기

[Oracle] SQL 주요함수 -2-

category DB/Oracle 2021. 5. 7. 10:50

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;