Oracle 은 쉼표 로 구 분 된 문자열 을 여러 줄 의 데이터 인 스 턴 스 로 나 누 어 상세 하 게 설명 합 니 다.

머리말
최근 에 업무 중 에 특정한 표 의 특정한 필드 를 만 나 는 것 은 데이터 내용 을 확장 할 수 있 고 정 보 는 쉼표 로 구분 되 어 생 성 된 것 입 니 다.현재 수 요 는 이 필드 데이터 에 따라 다른 표 에서 관련 내용 을 조회 하 는 것 을 보 여 주 려 고 합 니 다.첫 번 째 아 이 디 어 는 데 이 터 를 절단 하고 쉼표 를 절단 문자 로 하 는 것 입 니 다.다음은 총 결 된 실현 방법 으로 여러분 이 참고 하고 가 르 칠 수 있 도록 하 는 것 입 니 다.

1、regexp_substr 함수,정규 로 문자열 을 나 눕 니 다.함수 용법 은:(Oacle 10g+버 전이 어야 지원 합 니 다)
 REGEXP_SUBSTR 함수 형식 은 다음 과 같 습 니 다.
function REGEXP_SUBSTR(String, pattern, position, occurrence, modifier)
__srcstr:정규 처리 가 필요 한 문자열
__pattern:일치 하 는 정규 표현 식 을 진행 합 니 다.
__position:시작 위치,몇 번 째 문자 부터 정규 표현 식 일치(기본 값 1)
__occurrence:몇 번 째 분 단 된 그룹 을 가 져 옵 니 다.(분 단 된 최초의 문자열 은 분 단 된 순서대로 그룹 으로 배 열 됩 니 다.)기본 값 은 1 입 니 다.
__modifier:모드('i'는 대소 문 자 를 구분 하지 않 고 검색 합 니 다.'c'대소 문 자 를 구분 하여 검색 합 니 다.기본 값 은'c'입 니 다.)정규 표현 식 의 문자 대소 문자 일치
-------------------------------------------------------------------------------------------------------------------

  이 함 수 는 매번 하나의 문자열 만 추출 할 수 있 습 니 다.약간 닭 갈비 가 있 습 니 다.문자열 에 있 는 쉼표 의 수량 은 확실 하지 않 습 니 다.쉼표 가 2 개 있 으 면 추출 해 야 할 필드 는 3 개 입 니 다.추출 할 필드 가 몇 개 있 는 지 확인 하기 위해 서 는 connect by 명령 으로 동적 매개 변수 구조의 연속 값 을 구현 해 야 합 니 다.원 문자열 의 길이 와 교 체 된 문자열 의 길 이 를 줄 이면 원 문자열 의 쉼표 수 를 얻 을 수 있 습 니 다.1 을 더 하면 추출 할 필드 수 있 습 니 다.

 SQL:

select bs from cs1_0 where slid='201804100038'
--          
SELECT REGEXP_SUBSTR((select bs from cs1_0 where slid='201804100038'),'[^,]+',1,1,'i') as       FROM DUAL;
--          ,                  
SELECT LEVEL FROM DUAL CONNECT BY LEVEL <=5;
--   REGEXP_SUBSTR occurrence(        )      ,   connect by    
SELECT REGEXP_SUBSTR((select bs from cs1_0 where slid='201804100038'),'[^,]+',1,LEVEL,'i') as       FROM DUAL CONNECT BY LEVEL <=5;
--    (          )
select regexp_substr((select bs from cs1_0 where slid='201804100038'),'[^,]+',1,LEVEL,'i') as       from dual 
connect by level <= length((select bs from cs1_0 where slid='201804100038'))-length(regexp_replace((select bs from cs1_0 where slid='201804100038'),',',''))+1;
2.Type 유형 과 function 함수 의 방식 으로 이 루어 집 니 다.

1)  TYPE  


CREATE OR REPLACE TYPE strsplit_type_12 IS TABLE OF VARCHAR2 (4000)

2)  function    
create or replace function strsplit_66(p_value varchar2,p_split varchar2 )  --   ,   
--            
 return strsplit_type_12
  pipelined is
  v_idx       integer;
  v_str       varchar2(500);
  v_strs_last varchar2(4000) := p_value;

begin
  loop
    v_idx := instr(v_strs_last, p_split);
    exit when v_idx = 0;
    v_str       := substr(v_strs_last, 1, v_idx - 1);
    v_strs_last := substr(v_strs_last, v_idx + 1);
    pipe row(v_str);
  end loop;
  pipe row(v_strs_last);
  return;
end strsplit_66;

SELECT ROWNUM   , a.* FROM TABLE(strsplit_66((select bs from cs1_0 where slid='201804100038'), ',')) a;

 테스트 해 보기:

총결산
여기에 오 라 클 이 쉼표 로 구 분 된 문자열 을 여러 줄 로 나 눈 데이터 에 관 한 글 을 소개 합 니 다.더 많은 관련 오 라 클 이 여러 줄 로 나 눈 데이터 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 지원 바 랍 니 다!

좋은 웹페이지 즐겨찾기