>데이터 베이스 >MySQL 튜토리얼 >MySQL에서 쉼표로 구분된 값을 개별 행으로 변환하는 방법은 무엇입니까?

MySQL에서 쉼표로 구분된 값을 개별 행으로 변환하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-14 08:30:42624검색

How to Convert Comma-Separated Values into Individual Rows in MySQL?

MySQL에서 쉼표로 구분된 값을 개별 행으로 변환

이 가이드에서는 MySQL 열 내의 쉼표로 구분된 값을 개별 행으로 변환하는 방법을 보여줍니다. 다음과 같이 쉼표로 구분된 데이터가 포함된 열이 있는 테이블이 있다고 가정해 보겠습니다.

<code>somethingA,somethingB,somethingC
somethingElseA, somethingElseB</code>

목표는 이 데이터를 다음과 같이 재구성하는 것입니다.

<code>somethingA
somethingB
somethingC
somethingElseA
somethingElseB</code>

이 SQL 쿼리는 다음과 같은 변환을 수행합니다.

<code class="language-sql">SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) value
FROM table1 t CROSS JOIN 
(
   SELECT a.N + b.N * 10 + 1 n
     FROM 
    (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
   ,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
    ORDER BY n
) n
WHERE n.n <= LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')) + 1;</code>

설명:

이 쿼리는 동적으로 생성된 숫자 테이블(하위 쿼리)과 SUBSTRING_INDEX() 함수를 교묘하게 사용합니다. SUBSTRING_INDEX() 구분 기호를 기준으로 하위 문자열을 추출합니다. 숫자 테이블은 각 쉼표로 구분된 값에 대한 색인을 제공합니다. WHERE 절은 쿼리가 각 행에서 쉼표로 구분된 실제 요소 수까지만 값을 처리하도록 보장합니다.

핵심 사항:

  • SUBSTRING_INDEX(string, delimiter, count): 이 기능은 매우 중요합니다. string은 입력이고, delimiter은 쉼표이며, count은 사용할 구분 기호를 지정합니다. count-1은 마지막 구분 기호 이후의 모든 항목을 가져옵니다.
  • 하위 쿼리는 임시 숫자 테이블을 생성합니다. 이러한 유형의 작업을 자주 수행하는 경우 성능 향상을 위해 기존 숫자 테이블로 대체할 수 있습니다.
  • WHERE 절은 원본 문자열의 쉼표 수에 따라 반환되는 행 수를 동적으로 조정하여 오류를 방지합니다.

이 방법은 쉼표로 구분된 값을 개별 행으로 효과적으로 분할하여 더 깔끔하고 관리하기 쉬운 데이터세트를 만듭니다.

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

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