날짜 : 2021-06-25
태그 : SQL 문자열 문자 함수
메모
아래에 설명된 모든 예제는 oracle 기준으로 작성되었습니다.
1.문자처리 함수 - 대소문자
select INITCAP('ORACLE SQL') from dual;
select deptno, INITCAP(dname) ,INITCAP(loc) from DEPT;
--첫글자만 대문자로출력해줌
SELECT UPPER('Oracle Sql') FROM DUAL;
--UPPER 함수는 전부 대문자로출력하는 함수이다. 간단한함수.
select ename from emp where ename=upper('King');
--이렇게하면 대문자의 이름으로된 데이터를 찾을때 용이하다.
select ename from emp where upper(ename)='KING';
--ename 컬럼을 모두 대문자로 바꾼후 > KING 대문자로 찾으면 중간에 KINg 같은 소문자가섞인 애매한단어도 찾을수 있다.
select lower('ORACLE SQL') from dual; -- 전부 소문자로출력
select ename from emp where lower(ename)='king';
select empno , ename , lower(job) , deptno
from emp
where lower(ename) = 'king';
2.문자처리 함수 - 문자열 연결
select concat('Oracle',12354) from dual;
-- concat 함수는 || 와 같은역할을한다,즉 함수안의 문자들을 연결시키는 함수임
select empno , ename , job , concat(ename,job)
from emp
where empno = 7369;
--ename의 내용과 job의내용이 붙어서 출력된다. empno(사원번호) 가 7369인 사원의.
3.문자처리 함수 - 길이추출, 문자찾기
select length('Oracle') from dual;
-- length 함수는 문자열길이를 숫자값으로 돌려줌
select empno , ename , length(ename) , sal , length(sal)
from emp
where deptno = 20;
select instr('MILLER','L',1,2) ,INSTR('MILLER','X',1,2) from dual;
--INSTR은 첫번째가 컬럼명이나표현식, 두번째는 찾고자하는문자,세번째 왼쪽첫번째부터 찾을건지 , 두번째는 같은 LL 값이있을시 몇번째껄 반환할지 여기서결과는 두번째 L이 반환이된다.
4.문자처리 함수 - 문자열 추출 substr
select substr('900303-1234567', 8,1) from dual;
--SUBSTR 함수는 지정한 문자에서 지정한 값(8)번째부터 지정한값(1)의 개수만큼 데이터가반환된다.
문자함수기때문에 첫번째 컬럼명이나표현식에서 ' ' 작은따옴표를 씌워줘야한다.
select substr('900303-1234567' , 8) from dual;
--이렇게 개수를 생략하면 인덱스8번자리부터 끝까지 데이터를보여준다.
select hiredate , substr(hiredate,1,2) 입사년도 from emp;
5.문자처리 함수 - 문자열 치환 replace
select replace('JACK and jue','J','BL') from dual;
--replace는컬럼이나표현식을 다른문자로 치환(대체)하는함수 , 대소문자 구분을 해야한다.
select ename, job , replace(job , 'A' , '$') from emp;
--job 컬럼의 A라는문자를 $로 변경하여 출력이된다. 예컨대 APPLE이라면 $PPLE로 출력됨
6.문자처리 함수 - 문자열 치환 replace
select lpad('MILLER',10,'*') from dual;
--lpad 와 rpad는 좌로 또는 우로정렬후, 지정한값의 갯수만큼(10)을 지정한 문자(*)로 채워서 지정(10개)의단어를만드는 함수임.
select ename,lpad(ename,15,'*') ,sal ,lpad(sal,10,'*') --LPAD 연습
from emp
where deptno =10;
select rpad('MILLER',10,'%') from dual; -- 자주사용되는 함수 주민번호별표시 보안에서많이 이용됨
6.문자처리 응용 예제
select substr('900303-1234567',1,8) || '******' as 주민번호 from dual; --|| 을이용한 혼합응용
-- substr 과 rpad의 혼합실패!! , 최초 작성한코드.
select substr('900303-1234567',1,8) , rpad('900303-1234567' ,14 , '*') from dual;
올바른 수정한코드
select rpad(substr('900303-1234567',1,8),14,'*') from dual;
--엑셀에서 함수 중첩하는것처럼 적용하면된다. 함수안에 함수.
replace와 substr 의 혼합
select replace('900303-1234567',substr('900303-1234567',9),'*****') 주민번호 from dual;
--원본데이터 900303-1234567 에서 substr 안의 내용에서출력되는 결과물 234567을 *로 치환하게된다.
select ltrim(' MILLER ') from dual; --좌측공백만제거 가능
select ltrim('MILLER','M') from dual;
-- LTRIM 함수 문법 LTRIM(컬럼명|표현식 , 'str') --여기서 str은 string 이라고 문자 라는뜻이다.
-- LTRIM은 좌측부터시작하여 지정한 문자를 제거하는역할을하는 함수이며 , 보통 TRIM함수는 공백제거에 많이쓰인다.
select ename,job,ltrim(job,'A') ,sal , ltrim(sal,'1') from emp;
select ltrim(' MILLER ') , length(ltrim(' MILLER '))
from dual;
select Rtrim(' MILEER '), length(Rtrim(' MILLER '))from dual;
--RTRIM은 오른쪽부터 찾기시작한다.
select trim( '0' from '0001230456000') from dual;
--trim은 from과 같이사용해야하고, 양쪽의 0을지워준다, 중간의0은 안지운다.
select trim( leading '0' from '0001230456000') from dual; -- leading은 좌측부터 삭제
select trim( trailing '0' from '0001230456000') from dual; -- trailing은 우측부터 삭제
select ename ,job , rtrim(job,'T'), sal , rtrim(sal,0)
from emp
where deptno = 10;
select empno , job ,
trim(leading 'S' from job) LEADING ,
trim(trailing 'N' from job) TRAILING
from emp
where empno = 7844;
select length(trim(' abc ')) from dual;
--양끝의 공백을지우게되며 length 함수가 최종함수이기때문에 결과적으로 3이 나오게된다.
생각 (질문)
오늘은 꽤 많은 단일함수들을 나가게 되었다. 배우면서 느낀것은 컴활이나 ITQ 를 공부하며 배운 함수와 거의 비슷하다는것.
오늘배우는 함수들은 대부분이 매우 중요하고 자주쓰이는 함수이다.
출처 (문헌)
학원에서 준 DB관련 책