>데이터 베이스 >MySQL 튜토리얼 >Oracle에서 쉼표로 구분된 문자열을 여러 행으로 분할하는 방법은 무엇입니까?

Oracle에서 쉼표로 구분된 문자열을 여러 행으로 분할하는 방법은 무엇입니까?

DDD
DDD원래의
2025-01-22 17:47:09151검색

How to Split a Comma-Delimited String into Multiple Rows in Oracle?

오라클에서 쉼표로 구분된 문자열을 여러 줄로 나누기

쉼표로 구분된 문자열을 여러 행으로 분할하는 것은 Oracle Database의 일반적인 데이터 전처리 및 분석 작업입니다. 이를 수행하는 방법은 여러 가지가 있지만 간단하고 효과적인 한 가지 방법을 살펴보겠습니다.

오라클의 정규식을 활용하고 기능별로 연결하는 것도 한 가지 방법입니다. 각 레코드에 쉼표로 구분된 오류가 포함되어 있는 다음 표를 살펴보세요.

名称 项目 错误
108 test Err1, Err2, Err3
109 test2 Err1

우리의 목표는 각 오류를 별도의 줄로 추출하여 다음과 같은 결과를 얻는 것입니다.

名称 项目 错误
108 test Err1
108 test Err2
108 test Err3
109 test2 Err1

이를 위해 계층적 쿼리와 regexp_substr을 사용하여 오류 발생 횟수에 따라 각 오류를 추출합니다. 다음 쿼리는 이 접근 방식을 보여줍니다.

<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
order by name</code>

이 쿼리는 쉼표를 사용하여 문자열 길이(regexp_replace)를 바꾸고 계층적 쿼리 메커니즘을 사용하여 일련의 다양한 수준을 생성합니다. 각 수준은 쉼표로 구분된 문자열로 오류 발생 횟수를 나타냅니다. 그런 다음 regexp_substr 함수는 발생 횟수를 기준으로 오류를 추출하고 최종 결과 세트에는 원하는 출력이 포함됩니다.

이 방법은 Oracle 10g 이상에서 쉼표로 구분된 문자열을 여러 줄로 분할하는 간단하고 효율적인 방법을 제공합니다. 이는 Oracle의 강력한 문자열 조작 기능과 계층적 쿼리 기능을 활용하여 필요한 데이터 변환을 달성합니다.

위 내용은 Oracle에서 쉼표로 구분된 문자열을 여러 행으로 분할하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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