DataBase/Oracle

[ORACLE]문자열 첫번째 문자, 마지막 문자 자르기 (SUBSTR, INSTR)

DevStory 2021. 5. 7.

INSTR Functicon

INSTR( string, substring [, start_position [, th_appearance ] ] )

문자열 위치를 반환해주는 함수입니다.

 

사용 가능한 버전

Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i, Oracle 8i


매개변수

string

- 문자열입니다.

- CHAR, VARCHAR2, NCHAR, NVARCHAR2, CLOB, NCLOB 타입 사용 가능합니다.

 

substring

- 검색 할려는 문자열입니다.

- 타입은 string과 동일합니다.

 

start_position

- string 문자열에서 검색을 시작할 위치입니다.

- 생략할 경우 기본 값은 1입니다.

- (-)음수일 경우 뒤에서 검색합니다.

 

th_appearance

- 검색한 결과의 순번입니다.

- 생략할 경우 기본 값은 1입니다.


특징

  1. 숫자 값을 반환합니다.
  2. 문자열의 첫 번째 위치는 1입니다.
  3. 문자열의 위치를 못 찾을 경우 0을 리턴합니다.

EX 1)

- 3번째 4번째 파라메타 생략하고 ',' 문자열 검색

SELECT INSTR(', A, B, C, D, E,', ',') AS SEARCH_CHAR
FROM DUAL;


EX 2)

- 4번째 파라메타 생략하고 시작 위치를 2로 하고 ',' 문자열 검색

- 4번째 파라메타 생략하고 뒤에서 ',' 문자열 검색

SELECT INSTR(', A, B, C, D, E,', ',', 2) AS FIRST_CHAR
     , INSTR(', A, B, C, D, E,', ',', -1) AS END_CHAR
FROM DUAL;


EX 3)

- 첫 번째 위치에서 ',' 문자열 검색 후 2 번째 순번의 위치

- 뒤에서 ',' 문자열 검색 후 2 번째 순번의 위치

SELECT INSTR(', A, B, C, D, E,', ',', 1, 2) AS FIRST_CHAR
     , INSTR(', A, B, C, D, E,', ',', -1, 2) AS END_CHAR
FROM DUAL;


응용 EX 1)

- 첫 번째 위치의 ',' 이후의 문자열 부터 마지막 문자까지 출력

SELECT SUBSTR(', A, B, C, D, E,', INSTR(', A, B, C, D, E,', ',', 1, 1) + 1, LENGTH(', A, B, C, D, E,')) AS STR1
     , SUBSTR(', A, B, C, D, E,', 2, LENGTH(', A, B, C, D, E,')) AS STR2
FROM DUAL;

두 컬럼의 결과 값은 동일하나 차이점이 존재합니다.

 

첫 번째 컬럼의 경우에는 ','의 첫 번째 위치를 모르므로 INSTR Function을 사용하여 첫 번째 위치의 ','를 찾아야합니다.

두 번째 컬럼의 경우에는 ','의 첫 번째 위치를 알고 있다는 가정하에 사용합니다.


응용 EX 2)

- 처음 위치부터 마지막 위치의 ',' 앞까지 문자열 출력 

SELECT SUBSTR(', A, B, C, D, E,', 1, LENGTH(', A, B, C, D, E,') - 1) AS STR1
     , SUBSTR(', A, B, C, D, E,', 1, INSTR(', A, B, C, D, E,', ',', -1, 1) - 1) AS STR2
FROM DUAL;

응용 EX 1) 과 동일한 방법입니다.

 

SUBSTR Function의 두 번째 매개변수는 처음 위치는 무조건 1이므로 1로 고정값으로 설정합니다.

 

첫 번째 컬럼의 경우에는 마지막 위치에 ','가 존재한다는 것을 알고 있다는 가정하에 사용합니다.

두 번째 컬럼의 경우에는 마지막 위치의 ','를 모르므로 INSTR Function을 사용하여 마지막 위치의 ','를 찾아야합니다.

 

반응형

댓글