집 >데이터 베이스 >MySQL 튜토리얼 >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 중국어 웹사이트의 기타 관련 기사를 참조하세요!