SQL 함수(일반 함수)

 

1. nvl(a,b) : a가 null이면 b 값으로 치환

2. nvl2(a,b,c) : a가 null이 아니면 b로, null이면 c로 치환

3. decode ( a, s1, r1, s2, r2, … d ) : a가 s1이면 r1, s2 이면 r2 모두 아니면 d

4. case when exp1 then r1
when exp2 then r2
when exp3 then r3 …..
else d
end : exp1 를 만족하면 r1, exp2 를 만족하면 r2, exp3를 만족하면 r3, 모두 아니면 d

 

SQL> select name, decode(substr(idnum, 7, 1), '1', '남',
  2                                           '2', '여',
  3                                           '?' )
  4  from student
  5  where deptno=102;

NAME       DE
---------- --
김진영     여
오유석     남
하나리     여
윤진욱     남


SQL>  select profno, name, position, to_char(round((sysdate-hiredate)/365,1), '09.9') worked_date,
  2         sal,decode(position, '교수', decode(name, '김도훈', '석좌교수후보')) etc
  3  from professor
  4* order by position, sal desc

    PROFNO NAME       POSITION             WORKE        SAL ETC
---------- ---------- -------------------- ----- ---------- ------------
      9901 김도훈     교수                  29.6        500 석좌교수후보
      9905 권혁일     교수                  26.0        450
      9906 이만식     부교수                23.3        420
      9908 남은혁     부교수                21.1        400
      9904 염일웅     전임강사              13.1        240
      9907 전은지     전임강사              10.6        210
      9903 성연희     조교수                18.6        360
      9902 이재우     조교수                16.7        320

8 rows selected.

SQL> select name, height,
  2     case when height >= 180 then 'A'
  3     when height between 170 and 179 then 'B'
  4          when height >=160 and height <= 169 then 'C'
  5          else 'D'
  6     end rank
  7* from student


NAME           HEIGHT R
---------- ---------- -
전인하            176 B
이동훈            172 B
박미경            168 C
김영균            170 B
박동진            182 A
김진영            164 C
지은경            161 C
오유석            177 B
하나리            160 C
임유진            171 B
서재진            186 A
윤진욱            171 B
이광훈            175 B
김진경            166 C
조명훈            184 A
류민정            162 C

16 rows selected.


SQL> select name, lower(userid)
  2  from student
  3* where length(userid)>=7


NAME       LOWER(USER
---------- ----------
박미경     ansel414
임유진     youjin12
조명훈     rader214
류민정     cleansky


SQL> select name, userid, to_char(to_date(substr(idnum, 1, 6), 'rr-mm-dd'), 'yyyy-mm-dd')
  2  from student;

NAME       USERID     TO_CHAR(TO
---------- ---------- ----------
전인하     jun123     1979-07-02
이동훈     Dals       1983-12-10
박미경     ansel414   1984-05-16
김영균     mandu      1981-03-21
박동진     Ping2      1985-11-24
김진영     simply     1982-06-06
지은경     Gomo00     1980-04-12
오유석     yousuk     1977-09-12
하나리     hanal      1985-01-09
임유진     YouJin12   1983-01-21
서재진     seolly     1985-11-29
윤진욱     Samba7     1979-04-02
이광훈     huriky     1981-09-13
김진경     lovely     1983-02-28
조명훈     Rader214   1984-12-14
류민정     cleanSky   1981-08-19

16 rows selected.


SQL> select name, to_char(nvl2(profno, profno, 0), '0999')
  2  from student;

NAME       TO_CH
---------- -----
전인하      9903
이동훈      0000
박미경      0000
김영균      9906
박동진      0000
김진영      9905
지은경      9907
오유석      9905
하나리      0000
임유진      9907
서재진      0000
윤진욱      9905
이광훈      9903
김진경      9902
조명훈      0000
류민정      9907

16 rows selected.


SQL> select studno, name, deptno,
  2         decode(mod(studno, 3), 0, 'A',
  3                                1, 'B',
  4                                2, 'C'
  5         ) team
  6  from student;

    STUDNO NAME           DEPTNO TEAM
---------- ---------- ---------- ----
     10101 전인하            101 A
     20101 이동훈            201 B
     10102 박미경            101 B
     10103 김영균            101 C
     20102 박동진            201 C
     10201 김진영            102 B
     10104 지은경            101 A
     10202 오유석            102 C
     10203 하나리            102 A
     10105 임유진            101 B
     10106 서재진            101 C
     10204 윤진욱            102 B
     10107 이광훈            101 A
     20103 김진경            201 A
     20104 조명훈            201 B
     10108 류민정            101 B


16 rows selected.

SQL> select name, tel, decode(substr(tel, 1, instr(tel, ')' ,1)-1), '02', '서울',
  2                                                                 '051', '부산',
  3                                                                 '052', '울산',
  4                                                                 '053', '대구',
  5                                                                  'Etc') Loc
  6  from student;

NAME       TEL           LOC
---------- ------------- ----
전인하     051)781-2158  부산
이동훈     055)426-1752  Etc
박미경     055)261-8947  Etc
김영균     051)824-9637  부산
박동진     051)742-6384  부산
김진영     055)419-6328  Etc
지은경     055)418-9627  Etc
오유석     051)724-9618  부산
하나리     055)296-3784  Etc
임유진     02)312-9838   서울
서재진     051)239-4861  부산
윤진욱     053)487-2698  대구
이광훈     055)736-4981  Etc
김진경     052)175-3941  울산
조명훈     02)785-6984   서울
류민정     055)248-3679  Etc

16 rows selected.


SQL> select name, sal, to_char(round(sal*0.15+sal, 0), '999,999') r_sal,
  2         to_char(trunc(sal*0.15+sal, 0), '999,999') t_sal
  3  from professor
  4* where to_char(hiredate, 'mm') between 1 and 3
  5  /

NAME              SAL R_SAL    T_SAL
---------- ---------- -------- --------
권혁일            450      518      517


SQL> select name, hiredate, trunc((sysdate-hiredate)/30, 0) work_month
  2  from professor
  3  order by 3 desc;

NAME       HIREDATE     WORK_MONTH
---------- ------------ ----------
김도훈     24-JUN-82           359
권혁일     08-JAN-86           316
이만식     13-SEP-88           283
남은혁     18-NOV-90           257
성연희     17-MAY-93           226
이재우     12-APR-95           203
염일웅     02-DEC-98           159
전은지     01-JUN-01           128

8 rows selected.


SQL> select  dname || '는 '|| loc
  2  from department
  3  where loc is not null;

DNAME||'는'||LOC
-----------------------------
컴퓨터공학과는 1호관
멀티미디어학과는 2호관
전자공학과는 3호관
기계공학과는 4호관


SQL> select ename, rpad(ename, 10, substr('1234567890', length(ename)+1,10))
  2* from emp

ENAME                RPAD(ENAME,10,SUBSTR
-------------------- --------------------
SMITH                SMITH67890
ALLEN                ALLEN67890
WARD                 WARD567890
JONES                JONES67890
MARTIN               MARTIN7890
BLAKE                BLAKE67890
CLARK                CLARK67890
SCOTT                SCOTT67890
KING                 KING567890
TURNER               TURNER7890
ADAMS                ADAMS67890
JAMES                JAMES67890
FORD                 FORD567890
MILLER               MILLER7890

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다