DB(SQL)

[SQL] 함수 연습1

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

 

 

 

단일 행 함수

***************************************************************************************
SQL> select ename from emp;

ENAME
--------------------
SMITH
ALLEN
WARD
JONES
MARTIN
BLAKE
CLARK
KING
TURNER
JAMES
FORD
MILLER

12 개의 행이 선택되었습니다.


LOWER( ) 함수 : 모든 문자를 소문자로 표현!

***************************************************************************************
SQL> select lower(ename) from emp;

LOWER(ENAME)
--------------------
smith
allen
ward
jones
martin
blake
clark
king
turner
james
ford
miller

12 개의 행이 선택되었습니다.

 

sysdate 함수  : 날짜나타내기
***************************************************************************************
SQL> select sysdate from emp;

SYSDATE
--------
09/07/30
09/07/30
09/07/30
09/07/30
09/07/30
09/07/30
09/07/30
09/07/30
09/07/30
09/07/30
09/07/30
09/07/30

12 개의 행이 선택되었습니다.

 

SQL> select sysdate from dual;

SYSDATE
--------
09/07/30


initcap( ) 함수 : 첫글자만 대문자로 나타내기

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

SQL> select initcap('the soap') from dual;

INITCAP('THESOAP
----------------
The Soap

 

SQL> select initcap(job) from emp;

INITCAP(JOB)
------------------
Clerk
Salesman
Salesman
Manager
Salesman
Manager
Manager
President
Salesman
Clerk
Analyst
Clerk

12 개의 행이 선택되었습니다.


concat( ) 함수 : 두개 문자 결합

**********************************************************************************************
SQL> select concat('직업은 ', job) from emp;

CONCAT('직업은',JOB)
--------------------------------------
직업은 CLERK
직업은 SALESMAN
직업은 SALESMAN
직업은 MANAGER
직업은 SALESMAN
직업은 MANAGER
직업은 MANAGER
직업은 PRESIDENT
직업은 SALESMAN
직업은 CLERK
직업은 ANALYST
직업은 CLERK

12 개의 행이 선택되었습니다.

 

문1>
SQL> select concat(concat(concat(ename, '의 연봉은 '), sal*12), '이다.')  from emp;

CONCAT(CONCAT(CONCAT(ENAME,'의연봉은'),SAL*12),'이다.')
--------------------------------------------------------------------------------------
SMITH의 연봉은 9600이다.
ALLEN의 연봉은 19200이다.
WARD의 연봉은 15000이다.
JONES의 연봉은 35700이다.
MARTIN의 연봉은 15000이다.
BLAKE의 연봉은 34200이다.
CLARK의 연봉은 29400이다.
KING의 연봉은 60000이다.
TURNER의 연봉은 18000이다.
JAMES의 연봉은 11400이다.
FORD의 연봉은 36000이다.
MILLER의 연봉은 15600이다.

12 개의 행이 선택되었습니다.

 

 

LPAD( ) 함수 : 정의된 문장의 왼쪽 나머지 공간을 지정한 문자로 채운다.

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

SQL> select lpad('Page 1', 15, '*') from dual;

LPAD('PAGE1',15,'*')
------------------------------
*********Page 1


SQL> select lpad(ename, 15, '-') from emp;

LPAD(ENAME,15,'-')
----------------------------------------------------
----------SMITH
----------ALLEN
-----------WARD
----------JONES
---------MARTIN
----------BLAKE
----------CLARK
-----------KING
---------TURNER
----------JAMES
-----------FORD
---------MILLER

12 개의 행이 선택되었습니다.

 

SQL> select lpad(ename, 15, ' ') from emp;

LPAD(ENAME,15,'')
----------------------------------------------------
          SMITH
          ALLEN
           WARD
          JONES
         MARTIN
          BLAKE
          CLARK
           KING
         TURNER
          JAMES
           FORD
         MILLER

12 개의 행이 선택되었습니다.

 

SQL> select rpad(ename, 11, 'x') from emp;

RPAD(ENAME,11,'X')
----------------------------------------------
SMITHxxxxxx
ALLENxxxxxx
WARDxxxxxxx
JONESxxxxxx
MARTINxxxxx
BLAKExxxxxx
CLARKxxxxxx
KINGxxxxxxx
TURNERxxxxx
JAMESxxxxxx
FORDxxxxxxx
MILLERxxxxx

12 개의 행이 선택되었습니다.

LTRIM( ) 함수 : 문자 제거 함수 왼쪽부터, 오른쪽 부터

**********************************************************************************************
SQL> select ltrim(ename,'A') from emp;

LTRIM(ENAME,'A')
--------------------
SMITH
LLEN
WARD
JONES
MARTIN
BLAKE
CLARK
KING
TURNER
JAMES
FORD
MILLER

12 개의 행이 선택되었습니다.


SQL> select rtrim(job,'N') from emp;

RTRIM(JOB,'N')
------------------
CLERK
SALESMA
SALESMA
MANAGER
SALESMA
MANAGER
MANAGER
PRESIDENT
SALESMA
CLERK
ANALYST
CLERK

12 개의 행이 선택되었습니다.


바꾸기 원하는 문자 바꾸기

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

SQL> select replace(ename, 'A', '111') from emp;

REPLACE(ENAME,'A','111')
------------------------------------------------------------
SMITH
111LLEN
W111RD
JONES
M111RTIN
BL111KE
CL111RK
KING
TURNER
J111MES
FORD
MILLER

12 개의 행이 선택되었습니다.


지정된 위치부터 해당 길이 만큼만 추출하기

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

SQL> select substr(job, 1, 2) from emp;

SUBSTR(JOB,1,2)
----------------
CL
SA
SA
MA
SA
MA
MA
PR
SA
CL
AN
CL

12 개의 행이 선택되었습니다.


//뒤에서 부터는 -1부터 -1씩 왼쪽으로 계산
SQL> select substr(job, -2, 2) from emp;

SUBSTR(JOB,-2,2)
----------------
RK
AN
AN
ER
AN
ER
ER
NT
AN
RK
ST
RK

12 개의 행이 선택되었습니다.


NVL( ) 함수

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

SQL> select comm+1000 from emp;
 COMM+1000
----------

      1300
      1500

      2400

      1000
12 개의 행이 선택되었습니다.

 

SQL> select (nvl(comm,0)+1000) from emp;
(NVL(COMM,0)+1000)
------------------
              1000
              1300
              1500
              1000
              2400
              1000
              1000
              1000
              1000
              1000
              1000
              1000

12 개의 행이 선택되었습니다.


 

[연습문제]

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


SQL> select ascii('Q') from dual;

ASCII('Q')
----------
        81

 

SQL> select instr('corporate floor', 'or') from dual;

INSTR('CORPORATEFLOOR','OR')
----------------------------
                           2

 

SQL> select length('가나다라마바사') from dual;

LENGTH('가나다라마바사')
------------------------
                       7


SQL> select user from dual;

USER
------------------------------------------------------------
SCOTT

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

 

문1>
SQL> select empno, ename, lower(job),deptno from emp
  2  where ename='SMITH';

     EMPNO ENAME                 LOWER(JOB)         DEPTNO
---------- --------------------   ------------------    ----------
      7369    SMITH                    clerk                      20

 

문2>
SQL> select deptno,initcap(dname),initcap(loc) from dept;

  DEPTNO INITCAP(DNAME)             INITCAP(LOC)
---------- ---------------------------- --------------------------
        10   Accounting                   New York
        20   Research                      Dallas
        30   Sales                           Chicago
        40   Operations                    Boston

 

문3>
SQL> select empno, ename, job, sal, deptno from emp
  2  where substr(ename,1,1)>'K' and substr(ename,1,1)<'Y'
  3  order by ename desc;

     EMPNO ENAME                JOB                       SAL     DEPTNO
---------- -------------------- ------------------ ---------- ----------
      7521 WARD                  SALESMAN               1250        30
      7844 TURNER               SALESMAN                1500        30
      7369 SMITH                  CLERK                      800         20
      7934 MILLER                 CLERK                     1300         10
      7654 MARTIN                 SALESMAN              1250         30

 

문4>
SQL> select empno, ename, length(ename), sal, length(sal) from emp
  2  where deptno=20;

     EMPNO ENAME                LENGTH(ENAME)        SAL LENGTH(SAL)
---------- -------------------- ------------- ---------- -----------
      7369 SMITH                            5        800            3
      7566 JONES                            5       2975           4
      7902 FORD                             4       3000           4


문5>
SQL> select ename, instr(ename, 'L') from emp;

ENAME                INSTR(ENAME,'L')
-------------------- ----------------
SMITH                              0
ALLEN                              2
WARD                              0
JONES                              0
MARTIN                             0
BLAKE                              2
CLARK                              2
KING                                 0
TURNER                            0
JAMES                              0
FORD                               0
MILLER                             3

12 개의 행이 선택되었습니다.


문6>
SQL> select ename, job, ltrim(job,'C'), sal, ltrim(sal, 1) from emp
  2  where deptno=10;

ENAME                JOB                LTRIM(JOB,'C')                SAL  LTRIM(SAL,1)
---------------------------------------------------------------------------------------------------------------
CLARK                MANAGER         MANAGER                      2450     2450

KING                 PRESIDENT         PRESIDENT                    5000     5000

MILLER               CLERK              LERK                             1300     300

 

문7>
SQL> select ename, job, rtrim(job, 'T'), sal, substr(sal, 1, length(sal)-1) from emp
  2  where deptno=10;

ENAME                JOB                RTRIM(JOB,'T')            SAL  SUBSTR(SAL,1,LENGTH(SAL)-1)
-------------------- ------------------ ------------------ ---------- -------------------------------------------------
CLARK                MANAGER            MANAGER              2450    245

KING                 PRESIDENT            PRESIDEN              5000    500

MILLER               CLERK                 CLERK                    1300   130

 

문8>
SQL> select ename, job, replace(job, 'A', '$') from emp;

ENAME                JOB                REPLACE(JOB,'A','$
-------------------- ------------------ ------------------
SMITH                CLERK                  CLERK
ALLEN                SALESMAN            S$LESM$N
WARD                SALESMAN            S$LESM$N
JONES                MANAGER             M$N$GER
MARTIN              SALESMAN            S$LESM$N
BLAKE                MANAGER             M$N$GER
CLARK                MANAGER             M$N$GER
KING                  PRESIDENT           PRESIDENT
TURNER              SALESMAN           S$LESM$N
JAMES               CLERK                  CLERK
FORD                ANALYST              $N$LYST
MILLER              CLERK                  CLERK

12 개의 행이 선택되었습니다.

 

문9>
SQL> select substr(ename,instr(ename,'E')+1) from emp;

SUBSTR(ENAME,INSTR(ENAME,'E')+1)
----------------------------------
SMITH
N
WARD
S
MARTIN

CLARK
KING
R
S
FORD
R

12 개의 행이 선택되었습니다.

 

SQL> select substr(job,instr(job,'E')+1,length(job)) from emp;

SUBSTR(JOB,INSTR(JOB,'E')+1,LENGTH(JOB))
-------------------------------------------------------------------
RK
SMAN
SMAN
R
SMAN
R
R
SIDENT
SMAN
RK
ANALYST
RK

12 개의 행이 선택되었습니다.


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

 

lower('ABC')
upper('abcDE')
LPAD('abc', 10, '*')
Ltrim(

 

 

oracle-day06-01(함수).txt

 

 

'DB(SQL)' 카테고리의 다른 글

[SQL] 제약조건 연습  (0) 2017.02.28
[SQL] 함수 연습2  (0) 2017.02.28
[SQL] SQL 연습2  (0) 2017.02.28
[SQL] SQL 연습1  (0) 2017.02.28
[SQL] 권한 관리  (0) 2017.02.28