2013년 5월 21일 화요일

다양한 함수 (퍼온글)



DUAL 테이블 - DUMMY 테이블 (계산식을 사용할때 사용하는 아무것도 없는 테이블)




숫자함수 
ROUND : 반올림해주는 함수이다. ROUND( 값, 반올림 지점) 형식으로 쓰인다.
   ex) ROUND(98.765, 2) = 98.77  // ROUND(98.765 , -1) = 100

TRUNC : 버림함수이다. 지정한 자리수 이하를 버림한다. 
    TRUNC(값 , 버림지점)형식으로 쓰인다.
   ex) TRUNC(98.765, 2) = 98.77 // TRUNC (98.765 , -1) = 90

MOD : 나머지를 구하는 함수이다. MOD(값 , 나눌수)형식으로 쓰인다.
   ex) MOD(12, 5) = 2    //  MOD(10, 5) = 0







문자함수

UPPER - 대문자로 변환시킨다.   ex) UPPER(sad) ------ 출력시 SAD
 
LOWER - 소문자로 변환시킨다.  ex) LOWER(select) ------ 출력시 SELECT


INITCAP
 - 이니셜만 대문자로 변환시킨다. 
ex) INITCAP(mir) ------ 출력시 Mir


LENGTH - 문자열의 길이를 알려준다.  ex) LENGTH(mir) ------ 출력시 3


INSTR - 특정문자가 출현하는 위치를 알려준다.
  INSTR( [검색할곳], [특정문자], [검색시작위치], [결과선택] ) 형식으로 쓰인다.
  ex) select instr('Welcome to Oracle 10g' , 'o', 3, 2)  -> 출력시 10

위 Welcome to Oracle 10g에서 o를 검색할때 3번째 자릿수부터 검색을 시작해서
두번째 발견된 'o'의 위치를 출력하라는 뜻이다.
공백값(스페이스)도 자릿수에 포함된다는거 까먹지 말자!

SUBSTR
 - 문자의 일부분을 추출한다. 
      SUBSTR( [추출할곳], [추출시작위치], [추출글자수] ) 형식으로 쓰인다.
ex) select substr("run and fly", 5, 3)  ->출력시 and 

  
LPAD - 오른쪽 정렬 후 왼쪽에 생긴 빈 공백에 특정 문자를 채운다.
RPAD - 왼쪽 정렬 후 오른쪽에 생긴 빈 공백에 특정 문자를 채운다.
LPAD,RPAD ( [정렬할곳], [정렬자릿수], [채워넣을문자] ) 형식으로 쓰인다.
ex) select rpad(ename, 10, 'is win') from emp;



LTRIM - 왼쪽에서 특정 문자를 삭제한다.
RTRIM - 오른쪽에서 특정 문자를 삭제한다.
LTRIM,RTRIM( [삭제될값], [삭제할특정문자] ) 형식으로 쓰인다.
ex) 'aaaOracle 10gaaa' 라는 글에서 앞뒤로 'a'를 지워보자.
select LTRIM('aaaOracle 10gaaa', 'a') from dual;



TRIM - 앞,뒤에서 특정 문자를 삭제한다.
위 RTRIM과 LTRIM의 특성을 합친것이라고 보면된다.
하지만 형식이 약간 다른데
TRIM( [삭제할특정문자] from [삭제될값] ) 형식으로 쓰인다.
 
ex) 'aaaOracle 10gaaa' 라는 글에서 앞뒤로 'a'를 지워보자.
select trim('a' from 'aaaOracle 10gaaa') from dual;








날짜함수

SYSDATE - 시스템에 저장된 현재 DATE를 출력한다.
 ex) select SYSDATE from dual   -> 출력시 11/08/25 (포스트쓰고 있는날짜가 8/25이다.)

MONTHS_BETWEEN - DATE와 DATE사이의 개월수를 계산한다.
date - date = '몇일'
MONTHS_BETWEEN(date, date) = '몇개월'
ex)  현재날짜부터 100일이 지난 날짜 구하기



ADD_MONTHS - DATE에 개월을 더한 DATE를 계산한다.
ex)  select ADD_MONTHS(sysdate, 6) from dual;   -> 출력시 12/2/25

LAST_DAY - 월의 마지막 DATE를 계산한다.
ex) select LAST_DAY(sysdate) from dual; -> 출력시 11/8/31
 
NEXT_DAY - 해당 date를 기준으로 명시된 요일에 해당하는 날짜를 반환한다.
ex) select NEXT_DAY(sysdate, '금') from dual;  -> 출력시 11/8/26





형변환함수

TO_DATE  - 문자열을 날짜 형으로 변환한다.    TO_DATE('문자', 'format형식')
ex) select to_date('1986/12/12', 'yyyy/mm/dd') from dual;
-> 문자를 변환하는것이기 때문에 '(홑따옴표)를 꼭 써줘야 한다.
-> 홑따옴표를 안쓰면 1986나누기 12나누기 12(숫자형태)로 인식한다.
-> 포멧형식에 맞는 문자를 집어 넣어야 한다.
TO_NUMBER - 문자형을 숫자형으로 변환한다. 
쓸일이 별로 없다..;; 심지어 책에 예제도 안나온다;;

TO_CHAR - 날짜나 숫자형을 문자로 변환한다. TH_CHAR(date | number, 'format형식' )

날짜 format형식 
   YYYY  년도 표현(4자리) 
   YY  년도 표현(2자리) 
   MM  월을 숫자로 표현 
   MON  월을 알파벳으로 표현 
   DAY  요일 표현 
   DY  요일을 약어로 표현

시간 format형식
   AM/PM  오전,오후 표시
   HH/HH12  시간(1~12)
   HH24  시간(0~23)
   MI  분을 표현
   SS  초를 표현 

숫자 format 형식
 9   한자리의 숫자 표현 ex) (1111, '99999') -> 1111
 0  앞부분을 0으로 표현  ex) (1111, 099999') -> 001111
 $  달러 기호를 앞에 표현  ex) (1111, '$99999') -> $1111 
 .  소수점을 표시  ex) (1111, '99999,99) -> 1111.00 
 ,  특정 위치에 , 표시  ex) (1111, '99,999) -> 1,111 
 MI  오른쪽에 -기호 표시  ex) (1111, '99999MI) -> 1111- 
 PR  음수값을 <>으로 표현  ex) (1111, '99990PR) -> <1111> 
 EEEE 과학적 표기법으로 표현 ex) (11, '9.9EEEE') -> 1.1E +01
 V 10ⁿ을 곱한값으로 표현 ex) (1111, '999V99') -> 111100 
 B 공백을 0으로 표현 ex) (1111, 'B9999.99') -> 1111.00 
 L 지역 통화를 표현 ex) (1111, 'L9999) ->  ₩1111






NULL변환 함수

NVL - null값을 0또는 다른 값으로 변환하기 위해 사용하는 함수이다.
이전에 comm을 더하는식에서 comm이 null값이여서 출력값도 null값이 였던 것을 보며 
null의 특성을 배웠다.NVL을 사용하면 null값을 0 또는 다른 값으로 변환할수 있기때문에 출력값이 null이 아닌
정상적인 출력값으로 바꿀수 있다. 



조건 함수

DECODE - C언어의 else if 구문과 같은 역활을 한다.
조건을 주고 난뒤 그 조건과 일치하는 값을 출력한다.

ex)부서번호에 따른 부서명 출력하기
select ename, deptno,
DECODE(                                       -> DECODE함수를 선언하였다.
   deptno, 10, 'ACCOUNTING',     -> 부서번호(deptno)가 10일때 ACCOUNTING
            20, 'RESEARCH',           -> 20일때 RESEARCH
        30, 'SALES',                    -> 30일때 SALES
        40, 'OPERATIONS') dname   -> 40일때 OPERATIONS를 부서명(dname)으로 출력한다.
from emp;


CASE- DECODE문과 같이 조건을 주고 난뒤 그 조건과 일치하는 값을 출력한다.
하지만 다른점이 있다면 DECODE문은 조건을 줄때 조건과 같은(=)만 할수 있으며
CASE문은 연산자를 사용하여 조건을 범위로 지정할수도 있다. 아래 예제를 보자

ex)부서번호에 따른 부서명 출력하기
select ename, deptno,
                   CASE when deptno = 10 then 'ACCOUNTING'
                              when deptno = 20 then 'RESEARCH'
                              when deptno = 30 then 'SALES'
                              when deptno = 40 then 'OPERATIONS'
               END AS dame
from emp;



좋은 블로그에서 퍼온글 ㅎㅎ 


<embed src="http://api.v.daum.net/static/recombox1.swf?nid=19905378&m=1" quality="high" bgcolor="#ffffff" width="400" height="80" type="application/x-shockwave-flash"></embed>

댓글 없음:

댓글 쓰기