>데이터 베이스 >MySQL 튜토리얼 >MySQL에서 연결된 문자열을 개별 행으로 분할하는 방법은 무엇입니까?

MySQL에서 연결된 문자열을 개별 행으로 분할하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-14 03:15:09872검색

How to Split Concatenated Strings in MySQL into Individual Rows?

MySQL에서 연결된 문자열 분할

데이터베이스 테이블로 작업할 때 단일 열에 단일 열로 연결된 여러 값이 포함되는 시나리오가 발생할 수 있습니다. 끈. GROUP_CONCAT 함수는 여러 행을 단일 문자열로 결합하는 데 탁월하지만 연결된 문자열을 개별 행으로 분할하는 반대 작업은 어려울 수 있습니다. 이 작업을 일반적으로 문자열 확장 또는 분해라고 합니다.

문제 설명:

쉼표가 포함된 "colors"라는 열을 저장하는 테이블이 표시됩니다. 색상 목록이 분리되어 있습니다. 목표는 각 행이 단일 색상을 나타내는 형식으로 테이블을 재구성하는 것입니다.

테이블 예:

id colors
1 Red,Green,Blue
2 Orangered,Periwinkle

원하는 테이블 형식:

id colors
1 Red
1 Green
1 Blue
2 Orangered
2 Periwinkle

해결책:

원하는 결과를 얻으려면 다음 MySQL을 사용할 수 있습니다. 쿼리:

SELECT
  id,
  SUBSTRING_INDEX(SUBSTRING_INDEX(colors, ',', n.digit+1), ',', -1) AS color
FROM
  colors
  INNER JOIN
  (SELECT 0 AS digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3) AS n
  ON LENGTH(REPLACE(colors, ',', '')) <= LENGTH(colors)-n.digit
ORDER BY
  id,
  n.digit

설명:

  1. SUBSTRING_INDEX(SUBSTRING_INDEX(colors, ',', n.digit 1), ',', -1 ): 연결된 문자열에서 개별 색상을 추출하는 데 사용되는 표현식입니다. 먼저 SUBSTRING_INDEX를 사용하여 n번째 쉼표 뒤의 첫 번째 쉼표부터 시작하여 다음 쉼표에서 끝나는 하위 문자열을 추출합니다. 그런 다음 두 번째 쉼표부터 시작하여 문자열 끝에서 끝나는 부분 문자열을 추출합니다. 이는 단일 색상을 효과적으로 선택합니다.
  2. (SELECT 0 AS digit UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3): 이 하위 쿼리는 각 색상의 위치를 ​​나타내는 0부터 3까지의 숫자 시퀀스를 생성합니다. 연결된 문자열에 색상을 지정합니다.
  3. ON LENGTH(REPLACE(colors, ',', '')) <= LENGTH(colors)-n.digit: 이 조인 조건은 쿼리가 색상 수(쉼표로 구분)가 4보다 작거나 같은 행만 반환하도록 보장합니다.
  4. ORDER BY id, n.digit: 결과가 ID와 색상 내 색상 위치를 기준으로 정렬됩니다.

참고: 이 쿼리는 각 행에 최대 4가지 색상이 포함되어 있다고 가정합니다. 행에 4개 이상의 색상이 있을 수 있는 경우 하위 쿼리를 수정하여 더 큰 숫자 시퀀스를 생성해야 합니다.

이 쿼리를 구현하면 테이블의 연결된 문자열을 개별 행으로 효과적으로 분할할 수 있습니다. 더 쉽게 처리하고 분석할 수 있습니다.

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

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