>데이터 베이스 >MySQL 튜토리얼 >Oracle에서 쉼표로 구분된 값을 열로 효율적으로 분할하는 방법은 무엇입니까?

Oracle에서 쉼표로 구분된 값을 열로 효율적으로 분할하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-22 09:36:09614검색

How to Efficiently Split Comma-Separated Values into Columns in Oracle?

Oracle: 쉼표로 구분된 값을 열로 효율적으로 구문 분석

데이터를 처리하려면 쉼표로 구분된 값(CSV)을 개별 열로 분할해야 하는 경우가 많습니다. Oracle은 정규식을 사용하여 효율적인 솔루션을 제공하며, 특히 많은 수의 값(이 경우 최대 255개)을 처리할 때 유용합니다. 이렇게 하면 각 열에 대한 SUBSTR() 함수의 번거로운 반복을 피할 수 있습니다.

과제: 최대 255개의 쉼표로 구분된 값을 개별 열로 추출

해결책: 활용 REGEXP_SUBSTR()

핵심은 REGEXP_SUBSTR() 함수와 다음 정규식입니다.

<code class="language-sql">REGEXP_SUBSTR(CSV_VALUES, '(.*?)(,|$)', 1, COLUMN_NUMBER, NULL, 1)</code>

정규식 이해:

  • (.*?): 탐욕스럽지 않게(.) 모든 문자(*)를 0번 이상(?) 일치합니다. 이렇게 하면 다음 쉼표까지만 캡처됩니다.
  • (,|$): 쉼표(,) 또는 문자열 끝($)과 일치합니다. 이는 값을 구분합니다.
  • 1: 첫 번째 캡처된 그룹(쉼표를 제외한 값 자체)이 반환되도록 지정합니다.
  • COLUMN_NUMBER: 추출할 값(열)을 나타냅니다(첫 번째는 1, 두 번째는 2 등).
  • NULL, 1: 이 매개변수는 대소문자를 구분하지 않고 첫 번째 항목을 선택하는 데 사용됩니다.

예시:

다음 CSV 문자열을 고려하세요.

<code>CSV_VALUES: 1.25, 3.87, 2, 5, 4, 3.3</code>

첫 번째 값(1.25)을 얻으려면:

<code class="language-sql">REGEXP_SUBSTR(CSV_VALUES, '(.*?)(,|$)', 1, 1, NULL, 1)</code>

두 번째 값(3.87)의 경우:

<code class="language-sql">REGEXP_SUBSTR(CSV_VALUES, '(.*?)(,|$)', 1, 2, NULL, 1)</code>

COLUMN_NUMBER을 반복하면 모든 값이 개별 열로 추출됩니다. 이 방법은 문자열 내 쉼표로 구분된 값의 개수에 관계없이 효율적으로 확장됩니다.

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

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