본문 바로가기
공부/Oracle

오라클 SQL 문법 공부5 - INITCAP, UPPER, LOWER, LENGTH, LENGTHB

by 리빈아빠 2017. 9. 19.
반응형

서론

이번부터는 기본 문법외에 여러가지 처리를 해주는 함수에 대해서 알아볼 것이다. 함수는 크게 단일행 함수와 복수행 함수로 나뉘어지는데 GROUP BY절을 사용할때 사용되는 함수들이 복수행 함수이며 나머지는 단일 행 함수라고 생각하면 편하다. 단일 행 함수는 각 컬럼의 데이터나 문자열, 숫자, 날짜등을 처리해준 값을 보여준다.

본론

INITCAP, UPPER, LOWER

INITCAP은 가장 앞의 문자를 대문자로 치환해주는 함수이다. 당연히 한글이나 숫자와는 상관없이 영문에 대하여 처리해준다. 예를들어 AAAA라는 문자열이 있다면 Aaaa 값으로 처리해준다. 띄어쓰기가 있다면 다시 앞에 대문자로 치환해준다. 참고로 아래 있는 FROM DUAL; 의 DUAL은 더미 테이블로 주로 테스트를 할때 사용되는 논리적인 테이블이다.

  select initcap('AAAA cccc'),
      initcap('AaAA')
  from dual;

UPPER는 영문을 모두 대문자로 변경해준다.

select initcap(ename),
       lower(ename),
       upper(ename)
  from emp
 where lower(ename) = 'smith';

반대로 LOWER는 모두 소문자로 변경해준다.

select initcap(ename),
       lower(ename),
       upper(ename)
  from emp
 where ename = UPPER('smith'); /*ename 컬럼 값들이 모두 대문자라는 전제*/

보통 특정 문자열을 찾을때 영소문자를 안 가리고 찾기 위해서 데이터 값을 통일해주어야 하는 경우가 있다. 한글은 상관없겠지만 영문같은 경우 CUP이라는 특정 단어를 찾고 싶은데 'Cup'이라고 저장이 되어 있을 수도 있고 'CUP' 혹은 'cup'으로 저장 되어 있을 수도 있다. 사용자가 데이터를 넣을때 특정패턴으로만 저장되게끔 했다면 상관이 없겠지만 마음대로 저장했을때 앞에 대소문자를 안 가리고 찾기 위하여 UPPER나 LOWER 처리를 하여 특정 단어를 찾게끔 사용할 때 주로 쓰인다.

WHERE 절에 LOWER(컬럼) = 'cup' 조건을 넣는 방식으로 처리하면 된다.

LENGTH, LENGTHB

LENGTH는 문자열의 길이를 알고 싶을때 사용한다.

SELECT LENGTH('가나다라'), LENGTH('ABCD') FROM DUAL;
 /*둘다 4글자 이므로 둘다 값은 4로 나온다*/

LENGTHB는 문자열의 바이트 수를 알고 싶을때 사용한다.

SELECT LENGTHB('가나다라'), LENGTHB('ABCD') FROM DUAL;
 /*한글은 글자당 2바이트, 영문,숫자는 1바이트 이기 때문에
각각 8과 4의 값이 나온다.*/

LENGTH는 눈에 보이는 그대로 글자수를 체크, LENGTHB는 바이트수, 실제 저장될때 사용된 바이트 값을 보여주는 함수이니 잘 구분해야 한다.

특수문자를 제외 한글만 입력받도록 되어있는 컬럼에 혹시나 다른 문자가 입력되었는지 확인을 할때 LENGTHB로 홀수 인 값들을 체크하면 비정상적인 행들이 나올 것으로 예상된다.

결론

실습은 다음 문법 공부6에서 배운거와 같이 하면 될 것 같다. 이렇게 함수들을 사용하여 컬럼에 있는 데이터나 문자열들을 가공한 다양한 값들을 얻을 수가 있다. 함수의 기능이 뭔지 더 알고 싶을때는 위에 있는 것처럼 더미테이블(DUAL)을 사용하여 확인하면 더 빨리 익숙해 질 것이다.