[SQL]반올림(ROUND), TRUNC,MOD,NEXT_DAY,TO_CHAR
/*특정위치 반올림 ROUND(숫자, 반올림위치)*/
select ROUND(1234.5678),ROUND(1234.5678,3) from dual;
/*특정위치 버리는 TRUNC(숫자,버릴위치)*/
select TRUNC(1234.5678,0), TRUNC(1234.5678,3) from dual;
/*가까운정수
큰정수 : CEIL(숫자)
작은 정수 : FLOOR(숫자)*/
select ceil(3.14),floor(3.14),
ceil(-3.14),floor(-3.14)from dual;
/*나머지값 MOD(나누기될 숫자, 나눌숫자)*/
select MOD(15,6),MOD(10,2) from dual;
/*중요!! 몇개월 이후 ADD_MONTHS(날짜데이터,더할 개월)*/
select SYSDATE,ADD_MONTHS(SYSDATE,3) from dual;
select empno,ename,hiredate,add_months(hiredate,120) AS 입사10주년 from emp;
select SYSDATE,ADD_MONTHS(SYSDATE,6) from dual;
/*두 날짜 개월수 차이 MONTHS_BEETWEEN(날짜1,날짜2)*/
select empno,ename,hiredate,SYSDATE,
months_between(hiredate,SYSDATE) as month1
from emp;
/* 돌아오는 요일 NEXT_DAY(날짜,요일문자)달의 마지막날짜 LAST_DAY(날짜) */
select SYSDATE, NEXT_DAY(SYSDATE, '월요일') 월요일,NEXT_DAY(SYSDATE, '화요일') 화요일,
LAST_DAY(SYSDATE)
from dual;
select NEXT_DAY('2020/05/29', '월요일') from dual;
/*8월의 3번째 토요일을 찾아라*/
select next_day(next_day(next_day('2020/07/31','토요일'),'토요일'),'토요일') from dual;
/*날짜 반올림, 버림 ROUND,TRUNC*/
select sysdate,
round(sysdate, 'CC'), /*연도 끝 두자리 기준*/
round(sysdate, 'YYYY'), /*7월 1일 기준*/
round(sysdate, 'Q'), /*분기 2번째달 16일 기준*/
round(sysdate, 'DDD'), /*정오 기준*/
round(sysdate, 'HH'), /*시간을 기준 */
from dual;
select sysdate,
TRUNC(sysdate, 'CC'), /*연도 끝 두자리 기준*/
TRUNC(sysdate, 'YYYY'), /*7월 1일 기준*/
TRUNC(sysdate, 'Q'), /*분기 2번째달 16일 기준*/
TRUNC(sysdate, 'DDD'), /*정오 기준*/
TRUNC(sysdate, 'HH') /*시간을 기준 */
from dual;
/* 157p 중요!!!!! 형 변환 함수 */select empno,ename,empno+'500'
from emp
where ename='KING';
select empno,empno+'ABCD'
from emp
where ename='KING';
/*
1. TO_CHAR(닐짜데이터, '출력하는 문자형태')(,'nls_date_language= japanese'):날짜데이터를 문자데이터로 변환
2. TO_NUMBER :문자데이터-> 숫자데이터 변환
3. TO_DATE : 문자데이터 -> 날짜데이터 변환 TO_DATE('문자열데이터',인식될 날짜형태')*/
*/
select to_char(sysdate, 'yyyy/mm/dd hh24:mi:ss')as 현재날짜시간 from dual;
select to_char(sysdate, 'day'),
to_char(sysdate, 'month'),
to_char(sysdate, 'cc'),
to_char(sysdate, 'w')
from dual;
select sysdate,
to_char(sysdate,'mon','nls_date_language = korean')한글,
to_char(sysdate,'mon','NLS_DATE_LANGUAGE = JAPANESE') 일본어,
to_char(sysdate,'mon','nls_date_language = english')영어1,
to_char(sysdate,'month','nls_date_language = english')영어2
from dual;
/*국가별 요일 출력하기 */
select sysdate,
to_char(sysdate,'day','nls_date_language = korean')한글,
to_char(sysdate,'day','NLS_DATE_LANGUAGE = JAPANESE')일본어,
to_char(sysdate,'day','nls_date_language = english')영어
from dual;
/*여러 숫자형식을 사용하여 급여 출력하기 */
SELECT to_char(sal,'$999,999')SAL_$,
to_char(sal,'L999,999.00')SAL_L,
FROM emp;
/*TO_NUMBER*/
select TO_NUMBER('1,300', '999,999')
-TO_NUMBER('1,500','999,999') from dual;
SELECT RPAD(substr('010-1234-5678',1,9),13,'*')FROM dual;
/*사원이름이 다섯글자이상이며 여섯글자미만인 사원정보를 출력
MASKING_EMPNO열에는 EMPNO 앞두자리외 뒷자리를 *기호로 출력
그리고 MASKING_NAME열에는 ENAME첫글자만 보여주고 나머지 수만큼 *기호로 출력*/
SELECT empno,RPAD(substr(empno,1,2),4,'*'),ename,RPAD(substr(ename,1,1),6,'*')as maskin_name
FROM emp
WHERE LENGTH(ENAME)>=5 and LENGTH(ENAME)<6;
/*월평균 근무일수는 21.5일 하루근무시간은 8시간 하루급여와 시급을 계산 (단,하루급여는 소수점 세번째 자리에서 버리고 시급은 두번째 소수점에서 반올림하세요*/
select empno,ename,sal,TRUNC((sal/21.5),2)DAY_PAY,ROUND((sal/21.5/8),1)TIME_PAY
from emp;