Oracle 기본정리 - 문자함수3(substr, trim, pad, instr, like)
프로그래밍 정리/Oracle
2019. 11. 29. 11:13
반응형
Oracle 기본정리 - 문자함수3(substr, trim, pad, instr, like)
-- TIP
-- select 검색시 대소문자 구분한다.
-- select 출력 시 : 숫자=오른쪽정렬, 문자열 = 왼쪽정렬
--substr('문자열',int)
--substr('문자열',int,int)
--맨앞은 0으로 시작한다.
-- (0,1)은 맨앞, (-1)은 맨뒤를 얘기한다.
select substr('abcdefg',2,3), substr('abcdefg',-1,3), substr('abcdefg',-7,3) from dual;
--ltrim('문자열') 왼쪽 공백 제거
select ltrim(' he llo ') || 'abc' from dual;
--ltrim('문자열1','문자열2') 문자열2 선택 제거, 순서상관없음, 왼쪽부터 다른문자열 만나는순간 멈춤
select ltrim('abcabca','a') from dual; --출력 : bcabca
select ltrim('abcabcabcd','abc') from dual; --출력 : d
select ltrim('abcacbdef','abc') from dual; --출력 : def
--rtrim('문자열') 오른쪽 공백 제거
select rtrim(' he llo ' )|| 'abc' from dual;
--rtrim('문자열1','문자열2') 문자열2 선택 제거, 순서상관없음, 오른쪽부터 다른문자열 만나는순간 멈춤
select rtrim('abcabca','a') from dual; --출력 : abcabc
select rtrim('cdabcabcab','abc') from dual; --출력 : cd
select rtrim('abcacbkkabc','abc') from dual; --출력 : abcacbkk
--trim('문자열') 양쪽 공백 제거
select trim(' he llo ') || 'abc' from dual; --출력 : he lloabc
--trim(명령어 '문자열1' from '문자열2') 명령어 종류는 leading, trailing, both 3개가 있다.
select trim(leading 'a' from 'abcdabc') from dual; --ltrim과 같다.
select trim(trailing 'a' from 'abcdabc') from dual; --rtrim과 같다.
select trim(both 'a' from 'abcdabc') from dual; --trim과 같다.
--lpad('문자열', 숫자,'채울문자') 문자열 왼쪽에 채울문자를 숫자만큼 채워준다.
select lpad('abc',5,'*#') from dual; --출력 : ##abc
select lpad('hong',10,'#') from dual; --출력 : ######hong
--rpad('문자열', 숫자,'채울문자') 문자열 오른쪽에 채울문자를 숫자만큼 채워준다.
select rpad('a',10,'#') from dual; --출력 : a#########
--instr('문자열','index문자열') index문자열을 왼쪽부터 찾은 첫번째 index값 출력
select instr('abcdabcdabcd','a') from dual; --출력 : 1
select instr('abcdabcdabcd','c') from dual; --출력 : 1
--instr('문자열1','index문자열',숫자) index문자열을 숫자부터 찾은 첫번째index값 출력
select instr('abcdabcdabcd','c',5) from dual; --출력 : 7
--instr('문자열1','index문자열',숫자1,숫자2) index문자열을 숫자1*숫자2 번째 부터 index값 출력
select instr('abcdabcdabcd','a',5,2) from dual; --출력 : 9
--instr('문자열1','index문자열',숫자1,숫자2) 숫자1 <0 이면 오른쪽 부터 찾음
select instr('bbbbbbbabbb','a',-6) from dual; --출력 : 9
---------------------------------------------------------------------문제풀어보기------------------------------------------------------------------
--문제 A가 두번째인 사원 검색
--문제 A가 두번째인 사원 검색
select * from emp where ename like '_A%';
--문제 E가 마지막두째자리 사원 검색
select empno, ename, sal*12+nvl(comm,0), hiredate from emp where ename like '%E_'; --방법1
select empno, ename, sal*12+nvl(comm,0), hiredate from emp where substr(ename,-2,1) = 'E'; --방법2
--문제 월급*12+comm 을 1000 반올림 나타내기, 반올림한 후 그 값 만큼 *표시
--방법1select empno, ename, trim(rpad( ' ' , round( (sal*12+nvl(comm,0))/1000,0 )+1 ,'*')) as sal,round( (sal*12+nvl(comm,0))/1000,0 ) as temp_sal, hiredate from emp where hiredate between '81-01-01' and '81-12-31'--방법2select empno, ename, trim(rpad( ' ' , round( (sal*12+nvl(comm,0))/1000,0 )+1 ,'*')) as sal,round( (sal*12+nvl(comm,0))/1000,0 ) as temp_sal, hiredate from emp where hiredate like '81/__/__';--방법3select empno, ename, trim(rpad( ' ' , round( (sal*12+nvl(comm,0))/1000,0 )+1 ,'*')) as sal,round( (sal*12+nvl(comm,0))/1000,0 ) as temp_sal, hiredate from emp where substr(hiredate,1,2) = '81';
--문제 emp테이블에서 s가 포함된 사원을 출력
select * from emp where instr(ename,'S') > 0; --방법1
select * from emp where ename like '%S%'; --방법2
--세번째가 R인 이름 출력
select * from emp where ename like '__R%'; --방법1
select * from emp where substr(ename,3,1) = 'R'; --방법2
select * from emp where instr(ename,'R',3)=3; --방법3
반응형
'프로그래밍 정리 > Oracle' 카테고리의 다른 글
Oracle 기본정리 - 함수5(decode, case when) (0) | 2019.11.29 |
---|---|
Oracle 기본정리 - 날짜,문자 함수4(sysdate, to_char, to_date, to_number, add_months, next_day) (0) | 2019.11.29 |
Oracle 기본정리 - 문자함수2(concat, inicap,lower,upper, length,lengthB, substr) (0) | 2019.11.29 |
Oracle 기본정리 - 기본함수1(abs,ceil,floor,exp,log,mod,power,round,trunc) (0) | 2019.11.29 |
Oracle 기본정리 - select, where 절, 와일드 카드, 날짜 (0) | 2019.11.29 |