Oracle/SQL

2012.01.02 SQL 1일차(2) (sql함수,문자함수,대소문자변환함수,문자열길이반환함수,문자조작함수)

에몽이ㅋ 2012. 1. 9. 22:42

SQL 함수

(단일행 함수, 복수행 함수 2가지가 있다.)



단일행 함수의 종류





대소문자 변환함수(문자함수)


종류

의미

사용예

INITCAP

문자열의 첫 번째 문자만 대문자로 변환

INITCAP(student) -> Student

LOWER

문자열 전체를 소문자로 변환

LOWER(ABC) -> abc

UPPER

문자열 전체를 대문자로 변환

UPPER(abc) -> ABC

  1  select lower(userid) as "User ID"

  2  from student

  3* where studno=20101

SQL> /


User ID

----------

dals


  1  select upper(userid) as "User ID"

  2  from student

  3* where studno=20101

SQL> /


User ID

----------

DALS



실습문제 : 학생 테이블에서 ‘김영균’ 학생의 이름, 사용자 아이디를 출력하되 사용자아이디는 첫글자가 대문자로 변환하여 출력하여라. 

SQL> select initcap(userid), name

  2  from student

  3  where name='김영균';


INITCAP(US NAME

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

Mandu      김영균

문자열 길이 반환함수(문자함수)

 종류

의미

사용예

 LENGTH

문자열의 길이를 반환 

LENGTH('홍동')    -->  2 

 LENGTHB

문자열의 바이트를 반환 

LENGTHB('홍동')   -->  4 



문자조작함수(문자함수)

 종류

의미 

사용예 

설명 

 CONCAT

두 문자열을 결합. 

||와 동일 

CONCAT('SQL','PLUS') --> SQLPLUS 

 

 SUBSTR

특정문자 또는 

문자열 일부를 추출 

SUBSTR('SQL*PLUS',5,4)  --> PLUS 

 ,5,4) --> 왼쪽에서 5번째 자리부터 4글자 뽑아라는 의미

,-4,4) --> 오른쪽에서 4번째 앞에서부터 4글자 뽑아라는 의미 , SUBSTRB는 바이트단위로

 INSTR

특정 문자가 출현하는 위치를 반환 

INSTR('SQL*PLUS','*',1,1)   -->  4 


INSTR('SQL*P*L*US,'*',1,2) --> 6

 ,1,1) 에서 앞의 1은 시작 위치, 뒤의 1은 원하는 글자 위치(원하는 글자가 여러 개 있을 경우, 첫번째냐 두번째냐 세번째냐 지정)

 LPAD

지정한 수만큼 채우는 것(왼쪽에 지정한 문자를 채움) 

LPAD('SQL',5,'*')  --> **SQL

지정한 문자가 왼쪽에 채워짐 

 RPAD

지정한 수만큼 채우는 것(오른쪽에 지정한 문자를 채움)

RPAD('SQL',5,'*')  -->  SQL**

지정한 문자가 오른쪽에 채워짐 

 LTRIM

왼쪽의 지정문자를 삭제 

LTRIM('*SQL','*')  --> SQL 

 

 RTRIM

오른쪽의 지정문자를 삭제 

RTRIM('SQL*','*')  --> SQL 

 



CONCAT 예제

SUBSTR 예제 + INSTR예제

 INSTR(예제)

  1  select concat(name,position)

  2* from professor

SQL> /


CONCAT(NAME,POSITION)

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

김도훈교수

이재우조교수

성연희조교수

염일웅전임강사

권혁일교수

이만식부교수

전은지전임강사

남은혁부교수


8 rows selected.


학생테이블의 전화번호칼럼에서 지역번호와 이름을 출력하라.

(02)도 있고 051)도 있어서 단순substr로는 불가능)


  1  select 

substr(tel,1, instr(tel,')',1,1)-1) 

"지역번호", name

  2* from student

SQL> /


지역번호                   NAME

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

051                        전인하

055                        이동훈

055                        박미경

051                        김영균


052                        김진경

02                         조명훈

055                        류민정


16 rows selected

학생테이블에서 userid 에서 2번째 a의 위치가 5번째인 학생의 name, userid 를 출력하세요.


SQL> select name, userid

  2  from student

  3  where instr(userid,'a',1,2)=5;


NAME       USERID

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

윤진욱     Samba7



RTRIM + SUBSTR 예제


학생테이블의 전화번호칼럼에서 지역번호와 이름을 출력하라.


  1  select rtrim(substr(tel,1,3),')') "지역번호", name
  2* from student
SQL> /

  ; SUBSTR에 의해서 XXX, 02)가 뽑혀져 나오게 되고 그 중 02)의 경우는 ')'가 RTRIM에 의해서 지워지게 되므로
     남는것은 지역번호    (다른 국번은 ')'가 없기때문에 RTRIM이 적용되어도 변화없음)

지역번 NAME
------ ----------
051    전인하
055    이동훈
055    박미경
051    김영균
051    박동진
055    김진영
055    지은경
051    오유석

02     조명훈
055    류민정

16 rows selected.