오라클 구분자 문자열 자르기 - olakeul gubunja munjayeol jaleugi

★ 특수 문자가 한개 있을 때

SELECT

   substr('', 5)           → return :

 , substr('yumipink@naver.com', 1,4)         → return : yumi

 , instr('yumipink@naver.com','@')            → return : 9
 , substr('yumipink@naver.com',1,(instr('yumipink@naver.com','@')-1))   → return : yumipink
FROM dual

;

★ 특수 문자가 여러개 있을 때

SELECT
  SUBSTR(MSG, 1, INSTR(MSG, '|', 1, 1) - 1) MSG_1                                                                         → return : 111
, SUBSTR(MSG, INSTR(MSG, '|', 1, 1) + 1, INSTR(MSG, '|', 1, 2) - INSTR(MSG, '|', 1, 1) - 1) MSG_2     → return : 222
, SUBSTR(MSG, INSTR(MSG, '|', 1, 2) + 1, INSTR(MSG, '|', 1, 3) - INSTR(MSG, '|', 1, 2) - 1) MSG_3     → return : 333
, SUBSTR(MSG, INSTR(MSG, '|', 1, 3) + 1, INSTR(MSG, '|', 1, 4) - INSTR(MSG, '|', 1, 3) - 1) MSG_4     → return : 444
, SUBSTR(MSG, INSTR(MSG, '|', 1, 4) + 1) MSG_5                                                                             → return : 555
FROM (SELECT '111|222|333|444|555' MSG FROM DUAL)
;

SELECT
  INSTR(SOURCE_INVOICE_NUM, '-',-1)                                                             → return : 17
, SUBSTR(SOURCE_INVOICE_NUM, INSTR(SOURCE_INVOICE_NUM, '-', 1, 3) + 1)    → return : ISRB071200008
FROM (SELECT 'IMC-071217-65123-ISRB071200008' SOURCE_INVOICE_NUM FROM DUAL)
;

Oracle instr 함수로 문자열 자르기

  • 2017.02.14 23:00
  • 데이터 관리/Database

Oracle instr 함수는 문자열(텍스트)에서 특정 문자의 위치를 리턴해주는 함수입니다.
instr 함수와 substr 함수를 함께 사용하여 특정 문자를 기준으로 텍스트를 파싱하여 가져올 수 있습니다.

아래와 같이 '|' 기호로 구분되어 있는 문자열이 있을 때, '|' 기호의 위치를 찾아 substr 함수를 이용하면 내용별로 잘라올 수 있겠죠.

SELECT 'Start|안녕,|반가워!|End' 

cs


이제 '|' 기준으로 문자열을 잘라서 가져와봅시다.

     , SUBSTR(내용, 1INSTR(내용, '|'11- 1AS a

     , SUBSTR(내용, 1INSTR(내용, '|'11+ 1INSTR(내용, '|', 1, 2- INSTR(내용, '|', 1, 1) - 1AS b

     , SUBSTR(내용, 1INSTR(내용, '|'12+ 1INSTR(내용, '|', 1, 3- INSTR(내용, '|', 1, 2) - 1AS c

     , SUBSTR(내용, 1INSTR(내용, '|'13+ 1AS d

  FROM (SELECT 'Start|안녕,|반가워!|End' AS "내용"

cs

위 쿼리를 실행하면 아래와 같은 결과값이 나옵니다.

내용 

 a

 b

 c

 d

 Start|안녕,|반가워!|End

Start 

 안녕,

반가워! 

End 

인터페이스 전문 송/수신 혹은 배치에서 대량에 데이터를 파일로 읽고 쓸 때 처리 속도와 성능을 위해서 전문 데이터를 가볍게?.. 만들어서 송/수신 혹은 입/출력에 사용합니다.

원부에서는 각각의 컬럼으로 데이터를 관리하지만, 종종 전송이력 혹은 파일 이력을 관리하는 테이블에는 저런 형식의 전문데이터가 통으로 들어가있는 경우가 있습니다.

인터페이스 이력 결과 데이터에서 역으로 프로그램을 찾아갈 때, 가독성있게 표시해서 데이터의 의미를 파악하기 위해 사용했던 쿼리였습니다.