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

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

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-14 09:21:11684검색

How to Split Comma-Separated Values into Rows in MySQL?

MySQL에서 쉼표로 구분된 데이터 변환

이 가이드에서는 MySQL 열 내의 쉼표로 구분된 값을 개별 행으로 효율적으로 변환하는 방법을 설명합니다. 우리는 MySQL 기능과 영리한 기술을 활용할 것입니다:

  1. 숫자 시퀀스 생성: 먼저 정수 시퀀스가 ​​포함된 임시 테이블을 생성합니다(또는 기존 테이블 사용). 이 순서는 대상 열의 쉼표로 구분된 값의 최대 개수보다 커야 합니다. 이 시퀀스는 개별 값을 추출하기 위한 인덱스 역할을 합니다.

  2. SUBSTRING_INDEX 활용: 여기에서는 SUBSTRING_INDEX 기능이 핵심입니다. 구분 기호와 지정된 항목을 기반으로 하위 문자열을 추출합니다. 각 값을 분리하기 위해 숫자 순서와 함께 이를 두 번 사용합니다.

다음은 이 접근 방식을 보여주는 예입니다.

<code class="language-sql">SELECT SUBSTRING_INDEX(SUBSTRING_INDEX(t.values, ',', n.n), ',', -1) AS value
FROM table1 t
CROSS JOIN (SELECT a.N + b.N * 10 + c.N * 100 AS 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
    ,(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) c
) n
WHERE n.n <= LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')) + 1;</code>

설명:

  • 중첩된 SELECT 문은 숫자 시퀀스를 생성합니다(필요에 따라 데이터에 맞게 조정).
  • CROSS JOIN 이 시퀀스를 테이블(table1)과 결합합니다.
  • SUBSTRING_INDEX(t.values, ',', n.n)n번째 쉼표까지 하위 문자열을 추출합니다.
  • SUBSTRING_INDEX(..., ',', -1) 그런 다음 이전 결과에서 문자열 끝까지의 값을 추출합니다.
  • WHERE 절은 쉼표로 구분된 문자열 범위 내의 값만 처리하도록 보장합니다. LENGTH(t.values) - LENGTH(REPLACE(t.values, ',', '')) 1 조건은 값의 개수를 동적으로 계산합니다.

이 방법은 쉼표로 구분된 값을 개별 행으로 효과적으로 분할하여 MySQL의 데이터 조작을 위한 깔끔하고 효율적인 솔루션을 제공합니다. table1values을 실제 테이블 및 열 이름으로 바꿔야 합니다.

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

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