본문 바로가기
DBMS/ORACLE

[ORACLE] 오라클_문자함수( SUBSTR,SUBSTRB : 문자열 자르기 )

by 썸머워즈 2019. 2. 13.
반응형

SUBSTR

  • SUBSTR(char, m, n) 함수는 m 번째 자리부터 길이가 n개인 문자열을 반환한다.
SELECT SUBSTR('oracleStudy',3) AS result FROM DUAL; -- acleStudy
SELECT SUBSTR('oracleStudy',3,4) AS result FROM DUAL; -- acle

-- (-n) 은 뒤에서 n번째 자리부터
SELECT SUBSTR('oracleStudy',-3,2) AS result FROM DUAL;  -- ud

n은 생략이 가능한데, 그럴경우에는 시작지점부터 모든 문자열을 보여준다.

SUBSTRB

  • SUBSTRB(char, m, n) 함수는 SUBSTR과 비슷하나 B는 Byte를 의미한다.
SELECT SUBSTRB('오라클스터디',4) AS result FROM DUAL; --라클스터디
SELECT SUBSTRB('oracle',4) AS result FROM DUAL; -- cle
SELECT SUBSTRB('오라클스터디',5) AS result FROM DUAL; --클스터디

SUBSTR VS SUBSTRB

SELECT SUBSTR('오라클스터디',3) AS result FROM DUAL; --클스터디
SELECT SUBSTRB('오라클스터디',3) AS result FROM DUAL; --라클스터디

이 둘의 차이는 아무래도 Byte의 유무이다.

위 예제들을 살펴보면 같은 위치를 지정했는데도 다른 값이 나오는건 SUBSTRB가 byte로 따지기 때문에, 한글은 2바이트를 차지하므로 차이가 발생하는 것이다.

 

그래서 5바이트부터 시작 한다라고 명시하니 ''클스터디"간 반환된다.

영문의 경우에는 1byte를 차지하기 때문에 substr과 마찬가지로 4번째부터 보여주는 것이다.

 

해당 함수들을 사용할때의 주의할 점이 있는데, 다음과 같다.

  • n의 위치에 1보다 작으면 null값을 반환한다.
  • 소수점이 들어갈경우 정수로 변환된다.
  • char 위치는 말 그대로 문자타입 CHAR, VARCHAR, VARCHAR2 등등 사용 가능하다.
  • 시작위치와 종료위치에는 NUMBER 타입이거나 NUMBER타입으로 변환이 가능한 다른 타입이 사용 가능하다.

그 외로 SUBSTRC(유니코드 완성형 문자), SUBSTR2(UCS2 코드 포인트), SUBSTR4( USC4 코드 포인트) 가 존재하는데, 별로 사용하는 경우를 많이 보지 못해서 굳이 알 필요는 없을거 같다.

반응형


댓글

TOP