DB(SQL)

[SQL] 함수 연습2

_주야 2017. 2. 28. 22:29

 

 

 

숫자함수

**********************************************************************************************
- 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;

 

**********************************************************************************************

 

 

oracle-day07-00.txt

 

 

 

'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