[Oracle] 날짜 함수 - 돌아오는 요일을 구하는 (NEXT_DAY)

 

NEXT_DAY 함수는 날짜데이터와 요일 문자열을 지정하여 입력한 날짜 데이터 다음에 돌아오는 요일이 몇일인지를 반환합니다.

NEXT_DAY( 날짜 데이터, 요일문자 )

 

요일문자는 요일을 나타내는 문자로 다음과 같습니다.

1  일요일  SUNDAY   SUN 
2  월요일  MONDAY   MON 
3  화요일   TUESDAY   TUE 
4  수요일   WEDNESDAY   WED 
5  목요일  THURSDAY   THUR 
6  금요일   FRIDAY   FRI 
7  토요일  SATURDAY   SAT 

 

오늘 다음에 오는 월요일이 몇일인지 확인해 봅시다.

SELECT SYSDATE,
        NEXT_DAY(SYSDATE,'월요일'),
        NEXT_DAY(SYSDATE,'월'),
        NEXT_DAY(SYSDATE,2)
FROM DUAL;

 

오늘을 기준으로 이전에 특정요일이 몇일이었는지 알고 싶으면 어떻게 하면 될까? 기준일을 1주일 전(SYSDATE-8)으로 하면 간단히 해결할 수 있습니다. 

SELECT SYSDATE,
        NEXT_DAY(SYSDATE,'월요일'),
        NEXT_DAY(SYSDATE-8,'월요일')
FROM DUAL;

[Oracle] 날짜 함수 - 두 날짜 간의 개월 차이를 구하는 함수(MONTHS_BETWEEN)

 

MONTHS_BETWEEN 함수는 두개의 날짜 데이터 간의 개월 수 차이를 구할 때 사용합니다.

MONTHS_BETWEEN 함수를 이용하여 직원(EMP) 테이블에서 사원들이 입사한지 얼마나 되었는지 알아 봅시다.

 SELECT ENAME, HIREDATE, SYSDATE, MONTHS_BETWEEN(HIREDATE, SYSDATE)
FROM EMP;

아래는 입사일로 부터 오늘까지의 기간(개월)을 조회한 결과 입니다. 

입사일에서 오늘까지의 개월수 차이를 구하니, 음수에, 소수점 까지 나오네요. 이것을 보기 좋게 정리해 봅시다.

SELECT  ENAME, HIREDATE, SYSDATE, 
        MONTHS_BETWEEN(SYSDATE, HIREDATE),
        TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE)) AS TOTAL_MONTH,
        TRUNC( TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE))/12) AS YEAR,
        MOD(TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE)),12) AS MONTH
FROM EMP;

너무 복잡해 보이시나요?

  • MONTHS_BETWEEN(SYSDATE, HIREDATE) : 입사일로 부터 오늘 까지의 개월 수를 구합니다.
  • TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE)) : 개월수의 소수점 이하는 버리고 정수부분만 취합니다.
  • TRUNC( TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE))/12)  : 개월수를 년으로 환산하기 위해서 12로 나누고 소수점 이하는 버립니다. 
  • MOD(TRUNC(MONTHS_BETWEEN(SYSDATE, HIREDATE)),12) : 개월수를 12로 나눈 나머지를 구합니다.

하나씩 생각해 보면 익숙하지 않아서 그렇지 쿼리에서 모르는 부분은 없을 것 같네요.

 

※ 예제로 사용된 TABLE의 정보는 'SCOTT 계정 예제 Table(emp, dept, salgrade)'을 참고하시면 됩니다.
※ 예제에서 소수점 이하를 버리는데 사용된 TRUNC 함수가 궁금하신 분은 '[Oracle] 숫자 함수 - 특정 위치에서 버리는 함수(TRUNC) '부분을 참고 하시면 됩니다. 

[Oracle] 날짜 함수 - 몇 개월 이후의 날짜를 구하는 함수(ADD_MONTHS)

 

ADD_MONTHS 함수는 특정 날짜에 지정한 개월 수 이후 날짜 데이터를 반환 합니다. 이때 지정한 개월 수는 정수여야 합니다. 

ADD_MONTHS ( 날짜 데이터, 더할 개월 수 )

 

ADD_MONTHS 함수의 예로 지금 부터 6개월 뒤의 날짜를 구해 봅시다.

SELECT  ADD_MONTHS(SYSDATE, 6) 
FROM DUAL;

 

이번에는 직원들이 입사한지 10년 되는 날이 언제인지 구해 봅시다.

SELECT  ENAME, HIREDATE, ADD_MONTHS(HIREDATE, 10*12) 
FROM EMP;

위 쿼리에서는 10년을 개월수로 표현하기 위하여 120이라는 개월 수를 사용하는 대신 10년을 구분하기 쉽게 '10*12'라는 수식을 사용하였습니다. 

ADD_MONTHS 함수를 이용하여 30년 이상 근무한 사람을  출력할 수도 있습니다.

SELECT ENAME, HIREDATE, SYSDATE
FROM EMP
WHERE ADD_MONTHS(HIREDATE, 30*12) < SYSDATE;

 

 

※ 예제로 사용된 TABLE의 정보는 'SCOTT 계정 예제 Table(emp, dept, salgrade)'을 참고하시면 됩니다.

[Oracle] 날짜 함수 - 오늘이 몇일(SYSDATE) 

 

오늘은 SYSDATE 함수로 알 수있습니다. 다만, SYSDATE 함수로 알수 있는 날짜와 시간은 오라클 데이터베이스 서버상의 현재 날짜와 시간입니다. 이 함수를 이용하여, 오늘부터 100일 뒤가 몇월 몇일일까? 오늘이 1000일이면 우리가 만난 날은 언제이지? 와 같은 것을 쉽게 알 수 있는 방법이 없을까요? 오라클에서는 날짜 데이터를 이용한 간단한 연산을 제공합니다.

 

  • 날짜 데이터 + 숫자 : 날짜 데이터보다 숫자만큼 일수 이후의 날짜를 반환합니다.
  • 날짜 데이터 - 숫자 : 날짜 데이터보다 숫자만큼 일수 이전의 날짜를 반환합니다.
  • 날짜 데이터 - 날짜 데이터 : 두 날짜 데이터 간의 일 수 차이를 반환합니다.
  • 날짜 데이터 + 날짜 데이터 : 지원하지 않습니다.(연산불가)

예제를 통해 간단히 알아 봅시다. 

SELECT  SYSDATE AS NOW,
        SYSDATE+100 AS AFTER_100,
        SYSDATE-1000 AS BEFOR_1000
FROM DUAL;

 

 

숫자 함수 - 가장 가까운 정수 찾기(CEIL, FLOOR)

 

CEIL 함수는 입력한 숫자와 가까운 큰 정수, FLOOR 함수는 입력한 숫자와 가장 작은 정수를 반환하는 함수 입니다.

CEIL( 숫자 )
FLOOR( 숫자 )

 

CEIL 함수와 FLOOR 함수를 예를 통해 살펴봅시다.

SELECT  CEIL(1234.5678),
        FLOOR(1234.5678),
        CEIL(-1234.5678),
        FLOOR(-1234.5678),

FROM DUAL;

 

※ 예제로 사용된 TABLE의 정보는 'SCOTT 계정 예제 Table(emp, dept, salgrade)'을 참고하시면 됩니다.

+ Recent posts