2010년 5월 18일 화요일

SQL공부 #2

1.
substr(ename, 2, 1)
: ename컬럼의 값의 앞에서 두번째 글자부터 한글자를 추출, 즉, 두번째 글자를 추출
substr(ename, 3,3)
: ename컬럼의 값의 앞에서 세번째 글자부터 세글자를 추출, 즉, 3,4,5번째 글자를 추출
substr(ename, -3,2)
: ename컬럼의 값의 뒤에서 세번째 글자부터 두글자를 추출.
ie) ename컬럼이 abcdefg일때, 뒤에서 세번째 글자인 e부터 두글자, ef를 추출

2.
select ename, substr(lower(ename), 1, 3)  --lower : 문자를 모두 소문자로 바꿈
from emp;
select ename, substr(upper(ename), 1, 3) --upper : 문자를 모두 대문자로 바꿈
from emp;
select ename, substr(initcap(ename), 1, 3) --initcap : 문자의 맨 앞글자만 대문자 나머지는 소문자로 바꿈
from emp;

3.
select empno, substr(empno, 1,2)||'**', ename from emp;
--empno컬럼은 4자리의 숫자이다.
--substr(empno, 1,2) -> empno의 앞 두숫자를 출력하고 **를 출력
--숫자를 가리기 위한 목적

4.
select
  ename,
  substr(ename, 1,1),
  substr(ename, -1, 1),
  substr(lpad(ename, 10, '_'), 10, 1),
  lpad(ename, 10, '_')
  -- 다음과 같은 결과를 출력함
  -- 1234567890(자릿수)
  -- _____SMITH
from emp;

5.                                                1234(자릿수)
select * from emp where ename like '____';
--언더바는 문자 한 자리를 나타냄
--ename이 4자인 사원
select * from emp where length(ename) = 4;
-- length(ename) : ename컬럼이 문자열의 길이를 리턴

6.
select ltrim('SOS', 'S') from dual;
select trim(leading 'S' from 'SOS') from dual;
-- 왼쪽에서 부터 S를 찾아서 자름
select rtrim('SOS', 'S') from dual;
select trim(trailing 'S' from 'SOS') from dual;
-- 오른쪽에서 부터 S를 찾아서 자름
select ltrim(rtrim('SOS', 'S'), 'S') from dual;
select trim(both 'S' from 'SOS') from dual;
--양쪽에서 'S'를 찾아서 자름

7.
select ltrim('SOS', 'OS') from dual;
-- 'OS'의 의미는 OS가 아니라 O or S 이다.
-- 즉, sos 모두 지워진다.
select trim(both 'OS' from 'SOS') from dual;
-- ltrim 혹은 rtrim이 아닌 trim을 사용할 때는 문자 하나만 가능하다, 위 구문은 error.

8.
select translate('2KRW229', '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', '9999999999XXXXXXXXXXXXXXXXXXXXXXXXXX') "License" from dual;
-- 2KRW229라는 문자에서 숫자는 9로 문자는 X로 바꾼다.
-- 컬럼head는 License로 한다.

select col1 from t1
where translate(col1, '0123456789', '----------') like '%-----%';
-- col1컬럼에서 숫자를 -로 바꾸고, 연속한 5개의 -, -----가 포함된 행만 where절로 찾는다.

댓글 없음:

댓글 쓰기