데이터베이스

oracle 오라클에서 쓸수있는 문자함수

늘근이 2014. 9. 11. 13:43

--대문자 소문자 변환

select upper(first_name), lower(last_name) from employees


--이름중에 대소문자 구분없이 'a'가 포함된 사원은?

select lower(first_name || last_name) from employees



--where절에도 lower로 바꿀수있다.

select first_name, last_name, salary

from employees

where lower(first_name || last_name) like '%a%'


--첫글자만 대문자로 변경, 함수를 겹쳐써도 된다.

select initcap(lower(first_name) || last_name), salary

from employees


--지정한 글자수만 뽑아서 출력 => substr(시작, 몇개)  // 자바와 비슷하지만 다르다.

--컬럼명 없이 문자열만 출력하면 지정한 테이블의 데이터 갯수만큼 리턴이 되기 때문에 group by를 써주면 된다.

select 'abcdef' from employees group by 'abcdef'


--참고로 dual이라는 dummy 테이블이 있는데 이건 row가 1개이고 test목적으로 많이 쓰인다.

select * from dual

select 3*4 from dual


--글자수를 알아보는 거

select length('abc') from dual


--글자 substr을 이용해서 글자를 뽑아올수 있다. 유의해야 할점은 DB는 0부터 인덱스가 시작되지 않고 1부터 시작된다.

--그리고 또한 커서를 기준으로 글자수를 세기때문에 맨처음에 깜빡거리는 지점부터 고고

--보통 자바에서는 1에서 3을 뽑아오는 함수이지만, oracle db에서는 1에서부터 세개를 뽑는 함수임.

--근데 웃긴게 디비에서는 잘 안씀!

select substr('abcdef',1,3) from dual


--first_name 이 5글자 이상인 사원은?

select first_name, length(first_name), salary, hire_date from employees

where length(first_name) >=5

order by salary



--자리수 채워넣기 (여기서부터는 잘 안쓴다) 10자리를 별표시로 채워넣으라! 빈문자열은 안된다 lpad, rpad

select first_name, lpad(first_name, 10, '*') from employees


--반대로 짤라버리기(다만 잘라버릴 문자를 지정하지 않으면 공백을 잘라버리는거임, ltrim/rtrim/trim 모두 있다)

select first_name, ltrim(first_name, 'A')

from employees

where first_name like 'A%'


--문자열 변경, 매칭치환, 딱 맞아야 치환됨.

select first_name, replace(first_name, 'll', 'LL')

from employees 

where first_name like '%l%'


--각각 치환 이놈은 각각의 문자에 해당되는놈만 하는거임. 껄껄껄

select first_name, translate(first_name, 'll', 'LL')

from employees 

where first_name like '%l%'


--전화번호는 어떻게 바꿔야할까. 이렇게 되면, 해당되는 문자열을 바꿔준다. 편힌갓깉ㅇ,ㅁ!

select first_name, translate(phone_number, '0123456789','영일이삼사오육칠팔구')

from employees


--위치값을 찾아보고, 

select first_name, instr(first_name, 'a') from employees

--시작위치를 지정할수도 있다

select first_name, instr(first_name, 'a',3) from employees