단일 행 함수 - 문자함수
1) 데이터를 프로그램에서 가공처리하는 것보다 DBMS에서 처리해서 결과만 받아오는 것이 효율적
2) 아키텍처 면에서 프로그램은 받아온 결과를 보여주는데 주력하고, DBMS는 데이터를 저장/처리에 집중하면 
   둘 간에 적정한 역할의 분리가 이루어지므로 유연성이 증대
   (프로그램과 DBMS가 느슨한 연결이 되어서 변경/유지보수에 좋다)

 

 

 

 

 

<문자함수>

  • LOWER : 문자열을 소문자로 변환 
  • UPPER : 문자열을 대문자로 변환
  • INITCAP : 첫문자만 대문자로 나머지는 소문자로 변환
--ERP 부서가 있는 지역을 검색한다
SELECT loc "ERP 부서 지역"
FROM dept
WHERE LOWER(dname)='erp';

 

 

 

 

<문자연산함수>

  • SUBSTR 문자열내에 지정된 위치의 문자열을 반환
    SUBSTR('oracle', 1, 2) => or
  • LENGTH 문자열의 길이를 반환
    LENGTH('oracle') => 6
  • INSTR 문자열내의 문자 위치를 반환
    INSTR('oracle', 'a') => 3
  • TRIM 접두어나 접미어를 잘라냄
    TRIM ('o' FROM 'oracle') =>racle
  • LPAD, RPAD 지정된 문자열의 길이만큼 빈부분에 문자를 채운다.
    LPAD('20000', 10, '*') => *****20000
--부서의 명과 위치를 하나의 컬럼으로 검색한다
--CONCAT는 문자열을 연결해주는 함수지만 잘 사용하지 않는다. || 을 더 많이 사용.
SELECT CONCAT(dname, loc)
FROM dept;
--
SELECT dname||' '||loc
FROM dept;


--부서명과 길이를 출력하라
SELECT dname, LENGTH(dname)
FROM dept;


--substr함수를 이용해서 컬럼에 일부 내용만을 검색한다
SELECT ename, SUBSTR(ename, 2), --두번째 글자부터
              SUBSTR(ename, -2), --뒤에서 두번째
              SUBSTR(ename, 1, 2), --첫번째부터 두글자
              SUBSTR(ename, -2, 2)
FROM emp;


--단어에 'a'가 나타나는 위치를 출력한다
SELECT INSTR('database', 'a'),
        INSTR('database', 'a', 3),--3부터 시작해서 a가 어디에 있는지 인덱스 넘버 출력//4
        INSTR('database', 'a', 1, 3)--1 이후 3번째로 a가보이는 위치 //6
FROM dual;


--TRIM 함수를 이용 다양한 방법으로 문자열을 검색한다.
SELECT TRIM('남' from '남기남'),  --기
           TRIM(leading '남' from '남기남'),  --기남
           TRIM(trailing '남' from '남기남')  --남기
FROM dual;


--이름과 급여를 각각 10컬럼으로 채워준다
SELECT RPAD(ename, 10, '*'),
       LPAD(sal, 10, '*')
FROM emp;


--부서명의 마지막 글자를 제외하고 검색한다
SELECT dname, SUBSTR(dname, 1, LENGTH(dname)-1)
FROM dept;

 

 

 

 

 

<문자치환함수>

  • TRANSLATE : 문자단위 치환된 값을 리턴한다
                TRANSLATE('oracle', 'o', '#')
                => #racle
  • REPLACE : 문자열단위 치환된 값을 리턴한다
                REPLACE('oracle', 'or', '##')
                => ##acle

    ->REPLACE를 더 많이 쓴다
SELECT TRANSLATE('World of Warcraft', 'Wo', '-*'),
       REPLACE('World of Warcraft', 'Wo', '--')
FROM dual;

 

 

 

 

<Exercise>

--1) 이름이 두 글자인 학생의 이름을 검색한다
SELECT sno, sname
FROM student
WHERE LENGTH(sname)=2;

--2) '공'씨 성을 가진 학생의 이름을 검색한다
SELECT sno, sname 
FROM student 
WHERE INSTR(sname,'공')=1;

--3) 교수의 지위를 한글자로 검색한다(ex.조교수->조)
SELECT pno, pname, orders 
FROM professor
WHERE INSTR(orders,'조')=1;

--4) 일반 과목을 기초 과목으로 변경해서
--   모든 과목을 검색한다(ex.일반화학->기초화학)
SELECT cno, REPLACE (cname, '일반', '기초')
FROM course;


--5) 만일 입력 실수로 student테이블의 sname컬럼에 
--   데이터가 입력될 때 문자열 마지막에 공백이 추가되었다면
--   검색할 때 이를 제외하고 검색하는 SELECT문을 작성한다.
SELECT sno, REPLACE (sname, ' ', '')
FROM student;