>데이터 베이스 >MySQL 튜토리얼 >Oracle에서 문자열을 여러 행으로 효율적으로 분할하려면 어떻게 해야 합니까?

Oracle에서 문자열을 여러 행으로 효율적으로 분할하려면 어떻게 해야 합니까?

Susan Sarandon
Susan Sarandon원래의
2025-01-22 17:42:10106검색

How Can I Efficiently Split Strings into Multiple Rows in Oracle?

오라클 데이터베이스에서 문자열 분할을 여러 행으로 효율적으로 처리

데이터베이스 작업에서는 문자열을 개별 행으로 분할해야 하는 경우가 많습니다. Oracle은 특히 10g 이상 버전에서 이 작업을 관리하기 위한 효과적인 방법을 제공합니다.

정규식을 이용한 기본 방법

정규 표현식과 connect by 절을 사용하는 간단하면서도 강력한 기술입니다. 여기에는 임시 테이블을 구성하고 정규식 함수를 사용하여 하위 문자열을 추출하는 작업이 포함됩니다.

<code class="language-sql">with temp as (
    select 108 Name, 'test' Project, 'Err1, Err2, Err3' Error from dual
    union all
    select 109, 'test2', 'Err1' from dual
)
select distinct
  t.name, t.project,
  trim(regexp_substr(t.error, '[^,]+', 1, levels.column_value)) as error
from 
  temp t,
  table(cast(multiset(select level from dual connect by level <= length(regexp_replace(t.error, '[^,]+')) + 1) as sys.OdciNumberList)) levels;</code>

코드 이해

  1. temp CTE(공통 테이블 표현식)는 샘플 데이터를 시뮬레이션합니다.
  2. length(regexp_replace(t.error, '[^,] ')) 1은 쉼표로 구분된 값을 계산하여 오류 수를 결정합니다.
  3. select level from dual connect by level <= ...은 1부터 오류 개수까지 일련의 숫자를 생성합니다.
  4. table(cast(multiset(...) as sys.OdciNumberList))은 숫자 시퀀스를 사용 가능한 컬렉션으로 변환합니다.
  5. 교차 조인은 temp을 숫자 컬렉션과 결합하여 필요한 모든 조합을 만듭니다.
  6. trim(regexp_substr(t.error, '[^,] ', 1, levels.column_value))은 생성된 숫자를 위치 지표로 사용하여 각 오류를 추출합니다.

이 방법은 데이터 무결성을 유지하면서 여러 값이 포함된 문자열을 별도의 행으로 효율적으로 분할합니다.

위 내용은 Oracle에서 문자열을 여러 행으로 효율적으로 분할하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.