숫자함수
**********************************************************************************************
- ABS : 절대값
- CEIL : 올림값
- ROUND : 반올림
- TRUNC : 버림
- MOD(m/n) : 나머지
- SIGN : 숫자가 양수, 음수, 0
- FLOOR : 실수값을 정수값으로
- POWER : 지수값
- LOG : 로그값
- SIN, COS, TAN : sin, cos, tan 값 리턴
ABS 함수
**********************************************************************************************
SQL> select abs(-15) from dual;
ABS(-15)
----------
15
CEIL, FLOOR 함수
**********************************************************************************************
SQL> select ceil(15.7) from dual;
CEIL(15.7)
----------
16
SQL> select floor(15.7) from dual;
FLOOR(15.7)
-----------
15
SQL> select ceil(-15.7) from dual;
CEIL(-15.7)
-----------
-15
SQL> select floor(-15.7) from dual;
FLOOR(-15.7)
------------
-16
MOD 함수
**********************************************************************************************
SQL> select mod(11, 4) from dual;
MOD(11,4)
----------
3
ROUND 함수
**********************************************************************************************
SQL> select round(15.193, 1) from dual;
ROUND(15.193,1)
---------------
15.2
SQL> select round(15.193, 2) from dual;
ROUND(15.193,2)
---------------
15.19
SQL> select ename 이름, sal 월급여, round(sal*0.33, 2) 소득세 from emp;
SQL> select ename, sal, round(sal, -2) from emp; //-2 ->백단위에서 올리거나 내림.
ROUND와 TRUNC 비교
**********************************************************************************************
SQL> select trunc(15.79, 1) from dual;
TRUNC(15.79,1)
--------------
15.7
SQL> select round(15.79, 1) from dual;
ROUND(15.79,1)
--------------
15.8
[연습문제]
**********************************************************************************************
SQL> select sysdate from dual;
SQL> select ename, hiredate, hiredate+3 from emp;
SQL> select ename, hiredate, add_months(hiredate, 1) from emp;
SQL> select ename, hiredate, last_day(hiredate) from emp ;
SQL> select ename 이름, last_day(hiredate) - hiredate "D-Day" from emp;
SQL> select ename 이름, sysdate 현재날짜, hiredate 입사날짜,
SQL> select hiredate, months_between(sysdate, hiredate)/12 from emp;
SQL> select ename 이름, sysdate 현재날짜, hiredate 입사날짜,
2 round(months_between(sysdate, hiredate)/12,1) 기간 from emp;
SQL> select ename 이름, sysdate 현재날짜, hiredate 입사날짜,
2 trunc(months_between(sysdate, hiredate)/12,0) 기간 from emp;
SQL> select ename 이름, '09/01/01' 기준일, hiredate 입사일,
2 trunc(months_between('09/01/01', hiredate)/12,0)+1 기간 from emp;
변환함수
**********************************************************************************************
- TO_CHAR : 숫자,날짜 타입의 데이터를 varchar2 타입으로 변환
- TO_NUMBER : 숫자 타입으로 변환
- TO_DATD : 날짜 타입으로 변환
to_char 함수
**********************************************************************************************
SQL> select sysdate, to_char(sysdate, 'yyyy-mm-dd') from dual;
SYSDATE TO_CHAR(SYSDATE,'YYY
-------- --------------------
09/07/31 2009-07-31
SQL> select sysdate, to_char(sysdate, 'd') from dual; //요일알아보기, 일요일=1
SYSDATE TO
-------- --
09/07/31 6
SQL> select sysdate, to_char(sysdate, ' hh24 : mi ') from dual;
SYSDATE TO_CHAR(SYSDATE,'H
-------- ------------------
09/07/31 15 : 24
SQL> select sysdate, to_char(sysdate, ' hh24 : mi : ss ') from dual;
SYSDATE TO_CHAR(SYSDATE,'HH24:MI:SS'
-------- ----------------------------
09/07/31 15 : 24 : 59
SQL> select sysdate, to_char(sysdate, ' hh24 : mi : ss ') from dual;
SYSDATE TO_CHAR(SYSDATE,'HH24:MI:SS'
-------- ----------------------------
09/07/31 15 : 25 : 03
SQL> select sysdate, to_char(sysdate, ' hh24 : mi : ss ') from dual;
SYSDATE TO_CHAR(SYSDATE,'HH24:MI:SS'
-------- ----------------------------
09/07/31 15 : 25 : 18
[연습문제]
**********************************************************************************************
1.emp테이블에서 이름,월급여, 급여의 33%을 적용한 근로소득세를 구하여 나타내시오.
(단, 급여와 근로소득세는 $를 표시하고, 근로소득세는 소숫점 둘째짜리까지 나타내시오.)
2. emp테이블에서 이름, 급여, 수당, 급여와 수당의합계, 세금(11%), 실수령액을 구해 실수령액을 구하시오.
단, 실수령액은 100단위 이하 절삭하여 나타내시오.
세금은 소수점 이하 둘째자리에서 반올림하시오.
급여, 수당, 합계,세금에 $를 표시하고 3자리마다 ,를 표시하시오.
3. emp테이블에서 현재까지 근무일수가 몇주 몇일인가를 출력하여라.
단, 근무일수가 많은 사람 순으로 출력하여라.
SQL> select ename 이름, hiredate 입사일,
2 trunc((sysdate-hiredate)/7,0) 근무주,
3 trunc(((sysdate-hiredate)/7)/7,0) 근무일 from emp
4 order by sysdate-hiredate desc;
4. emp 테이블에서 10번 부서중 현재까지의 근무 월수를 계산하여 출력
SQL> select ename, hiredate, trunc(months_between(sysdate,hiredate),0) from emp
2 where deptno=10;
5. emp 테이블에서 10번 부서중 입사일자로 부터 5개월이 지난 후 날짜를 계산
SQL> select ename, hiredate, add_months(hiredate,5) from emp
2 where deptno=10;
6. emp 테이블에서 10 번 부서 중 입사일자를 '1998년 1월 1일'의 형태로 출력
SQL> select ename, to_char(hiredate,'yyyy"년 "mm"월 "dd"일 "') from emp
2 where deptno=10;
7. emp 테이블에서 부서 20 중 급여 앞에 $를 삽입하고 3자리 마다 , 를 출력하여라.
[연습문제]
**********************************************************************************************
1.현재날짜를 찍으시오.
SQL> select to_char(sysdate) "Current Data" from dual;
2.emp테이블에서 현재 급여에 15%가 증가된 급여를 사원번호, 이름, 업무, 급여, 증가된 급여, 증가액을
출력하는 select문장을 기술하시오.
SQL> select ename 이름, job 업무, sal 급여,
2 sal+sal*0.15 증가된급여, sal+sal*0.15-sal 증가액 from emp;
SQL> select lpad(ename,15,'*'), lpad(sal,15,'*') from emp;
SQL> select ename, length(ename), job from emp
2 where length(ename)>=6;
SQL> select ename, job, sal, comm, nvl(comm,0)+sal "sal+comm" from emp;
**********************************************************************************************
'DB(SQL)' 카테고리의 다른 글
[SQL] 테이블 생성/복사/삭제 (0) | 2017.02.28 |
---|---|
[SQL] 제약조건 연습 (0) | 2017.02.28 |
[SQL] 함수 연습1 (0) | 2017.02.28 |
[SQL] SQL 연습2 (0) | 2017.02.28 |
[SQL] SQL 연습1 (0) | 2017.02.28 |