-
SQL 단일행 함수_날짜함수Data Base_Oracle/SQL 2020. 1. 2. 23:32
날짜함수
함수 설명 months_between() 날짜 사이의 개월수를 반환하는 함수,
months_between(A, B) : A날짜에서 B날짜를 빼서 계산add_months() 특정 날짜에 지정한 개월수를 더한 날짜를 반환하는 함수,
add_months(날짜, 개월수)next_day() 지정한 날짜 이후에 해당 요일이 오는 날짜를 반환하는 함수
next_day(지정한 날짜, '요일'),
요일은 숫자로도 사용 가능 : 일요일 - 1, 월요일 - 2,화요일 - 3,,,,,금요일 - 6,토요일 - 7last_day() 지정한 날짜가 포함되어 있는 달의 마지막 날짜를 반환하는 함수,
윤년, 평년을 자동으로 계산sysdate 현재 날짜를 반환하는 함수 날짜함수 사용례
{ months_between() }
▷ emp테이블에서 각 사원들의 근무 개월수 계산(오늘날짜 - 입사일)
사원명, 입사일, 근무 개월수 순으로 출력
부서번호는 10번
근무 개월수가 가장 많은 순으로 정렬
▶ [ SQL > select ename, hiredate, months_between(sysdate, hiredate) 근무개월수
2 from emp
3 where deptno=10
4 order by 3 desc ]ENAME HIREDATE 근무개월수 CLAKR 81/06/09 462.793551 KING 81/11/17 452.535486 MILLER 82/01/23 455.341938 ※ 소수점은 round(), trunc(), floor() 등의 함수로 중첩함으로써 처리할 수 있음
{ add_months() }
▷ emp테이블에서 입사일기준 10개월 후의 날짜를 계산(단, sal이 2000이상인 사원들만 출력),
필드 순서는 이름, 급여, 10개월후의 날짜▶ [ SQL> select ename, sal, add_months(hiredate, 10) "10개월 후" from emp where sal>=2000; ]
ENAME SAL 10개월 후 JONES 2975 82/02/02 BLAKE 2859 82/03/01 CLARK 2450 82/04/09 ... ... ... { next_day() }
▷ emp테이블에서 사원들이 입사한 날짜의 요일 구하기
▶ [ SQL> select deptno, ename, hiredate, next_day(hiredate, '목요일') from emp; ]
→ 목요일인 날짜에서부터 고용일의 요일을 계산하면 됨DEPTNO ENAME HIREDATE NEXT_DAY(HIREDATE, '목요일') 20 SMITH 80/12/17 80/12/18 30 ALLEN 81/02/20 81/02/26 ... ... ... ... ※ next_day()안의 '목요일'은 5로도 대체 가능
{ last_day() }
▷ dual테이블에서 오늘 날짜가 속한 달의 마지막 날짜를 계산
▶ [ SQL> select last_day(sysdate) from dual; ]
LAST_DAY 20/01/31 ▷ emp테이블에서 입사한 달의 근무일수를 계산,
이름의 두번째 글자가 'A'인 직원 중에서 근무일수가 많은 순으로 정렬▶ [ SQL> select ename, hiredate, last_day(hiredate)-hiredate "입사한 달의 근무일"
from emp where ename like '_A%'
order by 3 desc; ]ENAME HIREDATE 입사한 달의 근무일 JAMES 81/12/03 28 WARD 81/02/22 6 MARTIN 81/09/28 2
날짜를 이용한 계산은 수식으로 하기 어렵기 때문에 날짜함수를 이용하는 편이 좋습니다.
'Data Base_Oracle > SQL' 카테고리의 다른 글
SQL 단일행 함수_일반함수 (0) 2020.01.02 SQL 단일행 함수_변환함수, to_char() 출력 패턴 (0) 2020.01.02 SQL 단일행 함수_숫자함수 (0) 2020.01.02 SQL 단일행 함수_문자함수 (0) 2020.01.02 SQL Dual Table (0) 2020.01.02