Infra & Security Eng/Database Engineering

단일 행 함수 날짜 함수 종류, 기능과 예제

엔지니어 E 2026. 2. 3. 22:49
반응형

날짜 함수 특징 

1. 날짜 데이터의 특징 겉은 문자, 속은 숫자: 화면에는 '2026-02-03' 같은 문자로 보이지만, 내부적으로는 숫자처럼 계산이 가능하다 (예: 오늘 날짜 + 100일 계산 가능) 

- 저장 용량: 데이터베이스 안에서 한 칸당 **6바이트(byte)**의 크기를 차지하며 저장됨
- 상세 정보 포함: 눈에 보이는 '년, 월, 일'뿐만 아니라 **'시, 분, 초'**까지 정밀하게 모두 저장함

2. 화면 출력과 주의사항 출력 방식: 날짜가 어떤 모양(예: 26/02/03 또는 2026-02-03)으로 보일지는 사용 중인 터미널(프로그램) 설정에 따라 달라짐

숨겨진 데이터 주의: 검색할 때 화면에는 날짜만 보여도 실제로는 '시간' 데이터가 숨어 있다. 정확한 날짜를 찾으려면 이 보이지 않는 시간 부분까지 고려해야 오류가 없다

3. 핵심 도구: SYSDATE 
현재 시간 검색: SYSDATE라는 함수를 사용하면 컴퓨터(시스템)의 현재 날짜와 시간을 즉시 불러올 수 있습니다. 별도의 재료 없이 예약어처럼 단독으로 쓰인다

 

날짜 함수명 종류와 기능 

함수명  기능 함수명  기능
ROUND 형식에 따라 반올림 한다
ROUND(날짜, 형식)

ROUND(sysdate, 'DD') --->
'2026/0101' 
(현재 시간이 낮 12시를 넘었는지 확인해서, 넘었으면 내일로 올리고 안 넘었으면 오늘로 맞추라)
LAST_DAY
(많이 사용 ★)
날짜를 포함한 달의 마지막 날짜를 검색 한다 
LAST_DAY(날짜)

LASY_DAY('2016/09/24') --->
2026/09/30
(LAST_DAY는 말 그대로 해당 날짜가 속한 달의 **'마지막 날(말일)'**이 언제인지 찾아주는 함수)
TRUNC 형식에 따라 절삭 한다
TRUNC(날짜, 형식)

TRUNC(sysdate, 'YYYY') --->
'2026/01/01'
(*'YYYY'**는 연도 아래 단위를 다 버리라는 뜻으로, 무조건 그해 1월 1일로 맞추라는 의미)

ADD_
MONTHS
(많이 사용 ★)
날짜에 n 달을 더한 날짜를 검색 한다 
ADD_MONTHS(날짜, n)
ADD_MONTHS('2011/07/02',23) ---> 2013/06/02
(2011년 7월 2일로부터 정확히 **23개월(1년 11개월)**이 지난 날짜를 계산하라)
YYYY 년 MM 월 DD 일 HH24 시 HH 시 MI 분 SS 초  NEXT_DAY 날짜 이후 지정된 요일에 해당하는 날짜를 검색 한다

일요일 , SUNDAY, 1 모두 동일하다 
NEXT_DAY(날짜, 요일)
NEXT_DAY('2026/01/02', '월요일') ---> 2026/01/05
(2026년 1월 2일(금요일) 이후에 처음으로 돌아오는 '월요일'은 몇 일인가?)
MONTHS_BETWEEN 두 날짜 간의 기간을 월 수로 계산 한다

MONTHS_BETWEEN(날짜1, 날짜 2) 
MONTHS_BETWEEN('2026/01/01', 2026/0101') ---> 8
(날짜1에서 날짜2를 빼서 두 날짜 사이에 몇 개월이 차이 나는지 계산하는 함수)

 

날짜 함수 이용 실습 

1. 날짜를 다양한 단위에서 반올림하거나 절삭 해본다 

SQL> ALTER SESSION SET nls_date_format = 'YYYY/MM/DD:HH24:MI:SS';
*  'NLS_DATE_FORMAT'이라는 날짜 표시 설정 값을 다음과 같이 지정(SET)한다 'YYYY/MM/DD:HH24:MI:SS'; 날짜를 [년/월/일:시:분:초] 순서로 보여달라는 규칙이다



SQL> SELECT sysdate,
2         
3         
4         
5  
 TRUNC(sysdate,'YY') 년,
 TRUNC(sysdate,'MM') 월,
 TRUNC(sysdate,'DD') 일 
FROM dual;


* TRUNC 함수는 "절삭(버림)"**을 의미한다. 즉, 지정한 단위 미만의 시간 정보는 묻지도 따지지도 않고 가장 가까운 과거의 시작점으로 초기화해 버리는 기능이다  

출력 결과 

SYSDATE 년 (YY) 월 (MM) 일 (DD)
2026/02/03:22:35:10 2026/01/01:00:00:00 2026/02/01:00:00:00 2026/02/03:00:00:00

 

2. 문시현이 오늘까지 일한 일수를 검색한다 
SQL> SELECT ename, TRUNC(sysdate)-TRUNC(hdate)+1 DAY
2  

 WHERE ename='문시현';


SELECT ename ---> 사원 테이블에서 이름을 가져 온다 

       TRUNC(sysdate) - TRUNC(hdate) + 1 DAY
          [근무일수 계산 논리]
          1. TRUNC(sysdate): 오늘의 '시:분:초'를 버리고 '00:00:00'으로 만든다
          2. TRUNC(hdate): 입사일의 '시:분:초'를 버리고 '00:00:00'으로 만든다
          3. (오늘 - 입사일): 두 날짜 사이의 차이(일수)를 구한다
          4. + 1: 당일(입사일 당일)을 포함하기 위해 1을 더한다
          5. DAY: 결과 열(Column)의 이름을 'DAY'로 표시한다

FROM emp ---> 사원 정보가 들어있는 emp 테이블에서 데이터를 찾는다

WHERE ename='문시현'; ---> 이름이 '문시현'인 직원의 데이터만 골라낸다 


3. 20번 부서원들이 입사 100일째 되는 날과 10년째 되는 날을 검색한다
SQL> SELECT eno, ename, hdate 입사일,
2                 


 FROM emp
hdate+99 "100일", ADD_MONTHS(hdate,120) "10년"
 WHERE dno = '20';


ELECT eno, ename, hdate 입사일 ---> 사번(eno), 이름(ename), 입사일(hdate)을 가져와서 출력한다

       hdate + 99 "100일", 
          [100일 기념일 계산]
          날짜에 숫자 99를 더하면 99일 후의 날짜가 나온다
          입사 당일(1일) + 99일 = 총 100일째 되는 날을 구하는 식이다

       ADD_MONTHS(hdate, 120) "10년"
          10주년 기념일 계산]
          ADD_MONTHS는 '개월 수'를 더하는 함수
          10년은 120개월(10*12)이므로, 입사일로부터 정확히 120개월 뒤의 날짜를 구한다

FROM emp ---> 사원 정보가 들어있는 emp 테이블에서 데이터를 가져온다 

WHERE dno = '20'; ---> 부서 번호(dno)가 '20'번인 사람들의 데이터만 골라낸다