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 3 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 3 4 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'번인 사람들의 데이터만 골라낸다 |