Oracle/Oracle

Oracle 2-2

longer 2012. 3. 28. 17:26

문자처리 함수

select upper('abecdef'), lower('abcdef') ,initcap('abddsd') from dual;

upper: 대문자로 변환

lower : 소문자로 변환

select empno, ename, job from emp where lower(job)='manager'; //컬럼의 속성이 대문자일경우 검색시 lower(컬럼명)을 쓰면 소문자로 검색이 가능하다. 반대로 upper('manager')해줘도 된다.

initcap:맨앞글자만 대문자 나머지 대 소문자로 처리

select length('안녕하세요') from dual; //글자의 길이 추출

select lengthb('안녕하세요') from dual;//글자의 바이트 추출

substr:문자열의 일부만 추출하는 함수

select substr('abcdefg',2) from dual;  //두번째 자리부터 끌까지 추출

select ename from emp where substr(ename,-1,1) like 'E'//ename컬럼의 마지막 문자 한개만 추출해서 이름이 e로 끝나는 사원을 검색

select substr('abcdefg',2,5) from dual;  //두번째 자리부터 다섯번째까지 추출

select ename, hiredate from emp;

select ename, substr(hiredate,1,2) from emp where substr(hiredate,1,2)=80;

->80년생만

Q.emp테이블에서 ename의 두번째 시작 문자가 A인 자료를 추출하세요

A1.  select ename from emp where substr(ename,2,1)='A'    

A2.  select ename from emp where ename like '_A%';

Q.emp 테이블에서 ename의 끝에서 두번째 문자가 E인 자료를 추출하세요.

A1.  select ename from emp where substr(ename,-2,1)='E';

A2.  select * from emp where ename like '%E_';

instr:특정 문자의 위치를 구하는 함수

select instr('abcdefgabc','c') from dual; //해당하는 글자가 있는 자릿수를 추출(첫번째로 검색된 c의 자리수만 추출함

select instr('WELCOME TO ORACLE','O',3,2) from dual; //문자열에 3칸 이동 후 o가 두번쨰 나오는 자리

select instr('hello world hi haha','h',4) from dual; //문장에 h부터 4자리간후 다시h를 만나는 자리의 총자리수

select instr('hello world hi haha','h',4,2) from dual;  //문장에 h부터 4자리 간 후 2번째 h를 만나는 자리의 총 자리

Q.이름의 세번쨰 자리가 r로 끝나는 사원을 검색

a1.select empno,ename from emp where ename like '__R%'

a2.(instr이용)

select empno, ename from emp where instr(ename,'R',3,1)=3;

a3.(substr이용)

select empno, ename from emp where substr(ename,3,1) = 'R';

 

king@naver.com hahahoho@hanmail.net pppp@gmail.com  출력 ->id 회사  .net

 

select substr(mail,1,instr(mail,'@')-1), substr(mail,instr(mail,'@')+1,instr(mail,'.')-1) from t1

 

rpad와 lpad  : 자릿수만큼 원하는 문자로 채워주기!

select lpad('123',20,'*')from dual;    //20글자자리수에서 왼쪽에 **채우고 나머지 3자리에는 123을 채움

select rpad('123',20,'*')from dual   //20글자자리수에서 오른쪽에 **채우고 나머지 3자리에는 123을 채움

select empno,ename,sal,rpad('*',round(sal/100),'*') from emp //sal를 100으로 나눈 정수의 값만큼 *을 생성

trim:공백문자를 삭제하는 함수(RTRIM,LTRIM,TRIM(양쪽다 공백제거))

select ltrim('       abcd       ')from dual;   //왼쪽 공백문자 제거후 보여줌

select ltrim('       abcd       ')from dual;   //왼쪽 공백문자 제거후 보여줌

select length(rtrim('   oracle   ')) from dual  //오른쪽 공백 제거후 길이 출력

select ltrim('abcdefg','a') from dual //왼쪽끝에있는 a제거

select ltrim('abcdefg','d') from dual //d가 문자사이에 있어서 제거못함

select trim(leading 'a' from 'abcdefg')from dual;  //문자열이 a로 시작하면 a로 깎아라~

select trim(trailing 'a' from 'abcdefgaa')from dual; //문자열이 a로 끝나면 a로 깎아라~

select trim(both 'a' from 'abcdefgaa')from dual;  //문자열 끝 양쪽에  a가 있으면 깎아라~

 

select substr(mail,1,instr(mail,'@')-1) ID, substr(mail,instr(mail,'@')+1,instr(mail,'.')-1 - instr(mail,'@')), substr(mail,instr(mail,'.')+1,3) from t1

//

 

select substr(mail,1,instr(mail,'@')-1) ID, substr(mail,instr(mail,'@')+1,instr(mail,'.')-1 - instr(mail,'@')), substr(mail,instr(mail,'.')+1,3) from t1

 

select substr(mail,1,