set autot off

  set timing off





  







  



'Oracle > SQL Fundamentals I' 카테고리의 다른 글

6일차 * 자동 변환과 인덱스  (0) 2012.04.10
6일차 * 3-28: For expression evaluation  (0) 2012.04.10
6일차 Conversion  (0) 2012.04.10
5일차 # 3-22: Date Functions  (0) 2012.04.09
5일차 # 3-20: Date 산술연산  (0) 2012.04.09


SQL> alter session set nls_language = american;

   SQL> select sysdate, hiredate, months_between(sysdate, hiredate), add_months(hiredate, 6)

from emp;


   SQL> select next_day(sysdate, 'Sat'), next_day(sysdate, 'wed')

from dual;

  

   SQL> select last_day('2011-02-11'), last_day('2016-02-21')

from dual;


   SQL> select  sysdate, next_day(add_months(sysdate, 6), 'fri')

from dual;



  * Single-Row functions

   SQL> select sysdate, hiredate, sysdate - hiredate, ceil(sysdate - hiredate)

from emp;



  * ROUND, TRUNC

   SQL> select sysdate, round(sysdate, 'month'), round(sysdate, 'year') from dual;

   SQL> select to_date('2011-12-15'), round(to_date('2011-12-15'), 'month') from dual;


   SQL> select hiredate, trunc(hiredate, 'Month'), trunc(hiredate, 'Year') from emp;

   SQL> select empno, ename, hiredate from emp where trunc(hiredate, 'Month') = '1981-02-01';   --> 1981년 2월 입사자


↑ ↑ ↑


cf.) SQL> select empno, ename, hiredate

         from emp

 where hiredate between to_date('1981-02-01') and to_date('1981-02-28');


   SQL> select empno, ename, hiredate from emp where trunc(hiredate, 'Year')  = '1982-01-01';   --> 1982년 입사자



'Oracle > SQL Fundamentals I' 카테고리의 다른 글

6일차 # Implicit conversion * 3-27 :For assignment  (0) 2012.04.10
6일차 Conversion  (0) 2012.04.10
5일차 # 3-20: Date 산술연산  (0) 2012.04.09
5일차 # 3-17: Working with Dates  (0) 2012.04.09
5일차 Date #3-19: DUAL table  (0) 2012.04.09

 - 시, 분, 초


SQL> alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS';

SQL> select sysdate, sysdate + 1, sysdate + 9 + 15/24 + 39/(24*60) + 22/(24*60*60)

    from dual;



  - 오늘 만나서 백일, 천일, 만 후


   SQL> select sysdate, sysdate + 100, sysdate + 1000, sysdate + 10000

from dual;



  - 만난 지 몇 일?


   SQL> select ceil(sysdate - to_date('2001-04-13')) as "만난지 몇 일" from dual;



-------------------------


SQL> alter session set nls_language = korean;


   SQL> select sysdate + (sysdate + 1)

from dual;

==> 오류: ORA-00975: 날짜와 날짜의 가산은 할 수 없습니다


   SQL> select sysdate * 5                        

from dual;

==> 오류: ORA-00932: 일관성 없는 데이터 유형: NUMBER이(가) 필요하지만 DATE임

'Oracle > SQL Fundamentals I' 카테고리의 다른 글

6일차 Conversion  (0) 2012.04.10
5일차 # 3-22: Date Functions  (0) 2012.04.09
5일차 # 3-17: Working with Dates  (0) 2012.04.09
5일차 Date #3-19: DUAL table  (0) 2012.04.09
5일차 Number// # 3-13: ROUND, TRUNC, CEIL, FLOOR, MOD  (0) 2012.04.09

SQL> alter session set nls_language = american;

SQL> alter session set nls_date_format = 'YYYY-MM-DD HH24:MI:SS';


--> format elements: YYYY, MM, DD, HH24, MI, SS 등등



SQL> select * from emp;

SQL> select sysdate from dual;


SQL> alter session set nls_date_format='DD/MON-RR HH:MI [AM]';


SQL> select * from emp;

SQL> select sysdate from dual;


SQL> alter session set nls_date_format='DD-MONTH-RR HH:MI:SS.SSSSS     PM';

SQL> select sysdate from dual;


SQL> alter session set nls_date_format='DD-month-rr';

SQL> select sysdate from dual;


SQL> alter session set nls_date_format='DD-mon-RR';

SQL> select sysdate from dual;

Dual Table 
    
    : Database 가 생생되면서 자동으로 생성되는 테이블로
      Sys 유저 소유의 테이블이나, 모든 유저가 Access 가능하다.
      DUMMY(Varchar2(1)) 칼럼 하나로 구성되어 있으며, 
      항상 하나의 로우만 간직 하고 있다.
      원래, 오라클 Internal Processing 을 위해서 사용된 테이블이다.
      일반 유저는 조회는 가능하다. DML 은 불가능하다.
      Sys 유저만 조회 및 DML 이 가능하다.


        SQL> desc dual 

SQL> desc sys.dual


SQL> select * from dual;


D

-

X


SQL> select 4770*123+5345/546

    from dual;


SQL> select round(45.995, 2)

    , round(45.995, -2)

    , round(645345.995, -2)

from dual;


   SQL> select trunc(45.995, 2)

    , trunc(45.995, -2) 

    , trunc(645345.995, -2)

from dual;


   SQL> select 7/3, ceil(7/3), floor(7/3)

from dual;


   SQL> select empno, mod(empno, 2), mod(empno, 3) from emp;

   SQL> select empno, mod(empno, 2), mod(empno, 3) from emp where mod(empno, 2) = 0;      --> 사번이 짝수

   SQL> select empno, mod(empno, 2), mod(empno, 3) from emp where mod(empno, 2) = 1;      --> 사번이 홀수

   SQL> select empno, mod(empno, 2), mod(empno, 3) from emp where mod(empno, 3) = 0;      --> 사번이 3의 배수




  문제) 월급을 * 를 이용해서 수평 막대 그래프로 표현하세요.

* 한개가 100입니다. 필요하면 올림을 수행하세요.


ENAME ...... SAL_GRAPH

------ ...... ----------------------

SMITH ...... ********

ALLEN ****************

WARD *************



힌트) CEIL, RPAD 함수를 사용하세요



해답)


SQL> select ename, sal, sal/100, ceil(sal/100)

    from emp;


↓ ↓ ↓ 


SQL> col sal_graph format a60

SQL> select ename, sal, rpad('*', ceil(sal/100)) as sal_graph

    from emp;


↓ ↓ ↓ 


SQL> select ename, sal, rpad('*', ceil(sal/100), '*') as sal_graph

    from emp;


ROUND (number) n값을 소수점 이하를 integer를 기준으로 반올림하여 반환한다


TRUNC (number) 인수 n1을 소수점 자리 파라미터 n2 이하를 절삭.


CEIL 인수에서 지정한 수치를 올림하여 정수를 구하는 함수이다.


FLOOR 지정한 숫자보다 작거나 같은 정수 중에서 최대값을 반환한다


MOD n2을 n1으로 나눈 나머지값을 반환.






'Oracle > SQL Fundamentals I' 카테고리의 다른 글

5일차 # 3-17: Working with Dates  (0) 2012.04.09
5일차 Date #3-19: DUAL table  (0) 2012.04.09
5일차 # 3-11 : Translate  (0) 2012.04.09
5일차 # 3-11 : TRIM vs. LTRIM, RTRIM  (0) 2012.04.09
5일차 # 3-11: RPAD, LPAD  (0) 2012.04.09

==> http://goo.gl/XQesC


  문제) 책 제목(ex: SQL*Plus User's Guide) 을 파일 이름으로 변환하는 방법?


SQL> select 'SQL*Plus User''s Guide' from dual;


↓ ↓ ↓ 


SQL> select 'SQL*Plus User''s Guide'

         , translate('SQL*Plus User''s Guide', ' */''', '___')

    from dual;



  문제) 다섯 자리 숫자가 포함된 행?


   SQL> drop table t1 purge;

   SQL> create table t1 (col1 varchar2(50));

   SQL> insert into t1 values ('여기는 ... 77785 입니다.');

   SQL> insert into t1 values ('그러나 241 이고 354 이면 ...');

   SQL> insert into t1 values ('잘 진행되면 98097가 가능하기도 ...');

   SQL> commit;


SQL> select * from t1;



SQL> select col1, translate(col1, '0123456789', '----------')

    from t2;


↓ ↓ ↓ 


SQL> select * from t2

    where translate(col1, '0123456789', '----------') like '%-----%';






- LTRIM, RTRIM 함수의 기본 예제: 기본 기능은 공백 제거


SQL> select substr('The Book and Movie', 4, 6)||'s Books'

         , rtrim(substr('The Book and Movie', 4, 6))||'s Books'

    from dual;


     ---------------


SQL> select ltrim('SSESS', 'S') from dual;

SQL> select trim(leading 'S' from 'SSESS') from dual;


SQL> select rtrim('SSESS', 'S') from dual;

SQL> select trim(trailing 'S' from 'SSESS') from dual;  


SQL> select trim(both 'S' from 'SSESS') from dual;  

SQL> select rtrim(ltrim('SSESS', 'S'), 'S') from dual;


     ---------------


SQL> select ltrim('xyxxyXYxy', 'xy') from dual;

    ==> http://goo.gl/kKO19


SQL> select trim('xy' from 'xyxxyXYxy') from dual;


==> 오류: ORA-30001: 트림 설정은 하나 문자만 가지고 있어야 합니다


     ---------------


  - LTRIM(char, [set]), RTRIM(char, [set])

     : set에 포함된 문자열이 아닌 문자열을 이루는 문자가 나타나지 않을 때까지 그 문자 하나 하나를 제거합니다.


SQL> select rtrim('abaa abbee aab', 'b a') from dual;



  문제) 숫자로만 이루어진 행 찾기ㅣ


SQL> drop table t1 purge;

SQL> create table t1 (col1 varchar2(10));

SQL> insert into t1 values ('77785');

SQL> insert into t1 values ('HJ241');

SQL> insert into t1 values ('9090P');

SQL> insert into t1 values ('130914');

SQL> insert into t1 values ('PUB01');

SQL> commit;



  - 해답 1)


SQL> select col1, ltrim(col1, '0123456789') from t1;


↓ ↓ ↓ 


SQL> select col1 from t1

    where ltrim(col1, '0123456789') is null;



  - 해답 2)


SQL> select col1, col1, col1

    from t1;


↓ ↓ ↓ 


SQL> select col1, upper(col1), lower(col1)

    from t1;


↓ ↓ ↓ 


SQL> select col1

    from t1

    where upper(col1) = lower(col1);


  - 해답 3)


SQL> select col1

    from t1

    where regexp_like(col1, '^[0-9]+$');








'Oracle > SQL Fundamentals I' 카테고리의 다른 글

5일차 Number// # 3-13: ROUND, TRUNC, CEIL, FLOOR, MOD  (0) 2012.04.09
5일차 # 3-11 : Translate  (0) 2012.04.09
5일차 # 3-11: RPAD, LPAD  (0) 2012.04.09
5일차 # 3-11: INSTR  (0) 2012.04.09
5일차 # 3-11: LENGTH  (0) 2012.04.09

SQL> select ename, lpad(ename, 10, '-'), rpad(ename, 10, '+')

    from emp;

  

↓ ↓ ↓ 


SQL> select ename, lpad(ename, 10, ' '), rpad(ename, 10)

    from emp;



SQL> select ename, substr(lpad(ename, 10, ' '), 10, 1), substr(ename, -1, 1)


====================================================================================================




'Oracle > SQL Fundamentals I' 카테고리의 다른 글

5일차 # 3-11 : Translate  (0) 2012.04.09
5일차 # 3-11 : TRIM vs. LTRIM, RTRIM  (0) 2012.04.09
5일차 # 3-11: INSTR  (0) 2012.04.09
5일차 # 3-11: LENGTH  (0) 2012.04.09
5일차 # 3-11: SUBSTR  (0) 2012.04.09

SQL> SELECT INSTR('CORPORATE FLOOR', 'OR', 3, 2) "Instring" FROM DUAL;


SQL> SELECT INSTR('CORPORATE FLOOR', 'OR', -3, 2) "Reversed Instring" FROM DUAL;

SQL> SELECT INSTR('CORPORATE FLOOR', 'OR', -3, 1) "Reversed Instring" FROM DUAL;



문제) 이름에 S가 포함된 사원?


SQL> select *

    from emp

    where ename like '%S%';


* INSTR 이용

SQL> select ename, ename

    from emp;


↓ ↓ ↓ 


SQL> select ename, instr(ename, 'S')

    from emp;


↓ ↓ ↓ 


SQL> select *

    from emp

    where instr(ename, 'S') > 0;





'Oracle > SQL Fundamentals I' 카테고리의 다른 글

5일차 # 3-11 : TRIM vs. LTRIM, RTRIM  (0) 2012.04.09
5일차 # 3-11: RPAD, LPAD  (0) 2012.04.09
5일차 # 3-11: LENGTH  (0) 2012.04.09
5일차 # 3-11: SUBSTR  (0) 2012.04.09
5일차 Character  (0) 2012.04.09


SQL> select length('한글'), length('오라클') from dual;


LENGTH('한글') LENGTH('오라클')

-------------- ----------------

            2                3


SQL> select length('한국Oracle') from dual;


LENGTH('한국ORACLE')

--------------------

                  8



문제) 회사에서 이름이 5자인 사원들의 모든 정보를 출력해다오, 오라클아!


SQL> select ename, length(ename)

    from emp;


방법1)

SQL> select *

    from emp

    where length(ename) = 5;



방법2)

select *

from emp

where ename like '_____';






'Oracle > SQL Fundamentals I' 카테고리의 다른 글

5일차 # 3-11: RPAD, LPAD  (0) 2012.04.09
5일차 # 3-11: INSTR  (0) 2012.04.09
5일차 # 3-11: SUBSTR  (0) 2012.04.09
5일차 Character  (0) 2012.04.09
5일차 3. Single-Row Functions  (0) 2012.04.09

+ Recent posts