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

MySQL 열의 쉼표로 구분된 값을 별도의 행으로 분할하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-11-28 07:32:11
원래의
725명이 탐색했습니다.

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

Mysql 문자열 분할

문제:

쉼표가 포함된 열이 있는 테이블이 있습니다. -구분된 값. 이러한 값을 별도의 행으로 분할하고 각 값이 행에 해당하도록 하려고 합니다.

예를 들어 테이블이 주어지면:

Col1 col2
1 a,b,c
2 d,e

다음 행을 추출하려고 합니다.

Col1 col2
1 a
1 b
1 c
2 d
2 e

해결책:

이는 MySQL을 사용하여 달성할 수 있습니다. 저장 프로시저. 다음 SQL 스크립트에는 저장 프로시저와 여기에 사용되는 함수가 모두 포함되어 있습니다.

DELIMITER $$

CREATE FUNCTION strSplit(x VARCHAR(65000), delim VARCHAR(12), pos INTEGER) 
RETURNS VARCHAR(65000)
BEGIN
  DECLARE output VARCHAR(65000);
  SET output = REPLACE(SUBSTRING(SUBSTRING_INDEX(x, delim, pos)
                 , LENGTH(SUBSTRING_INDEX(x, delim, pos - 1)) + 1)
                 , delim
                 , '');
  IF output = '' THEN SET output = null; END IF;
  RETURN output;
END $$


CREATE PROCEDURE BadTableToGoodTable()
BEGIN
  DECLARE i INTEGER;

  SET i = 1;
  REPEAT
    INSERT INTO GoodTable (col1, col2)
      SELECT col1, strSplit(col2, ',', i) FROM BadTable
      WHERE strSplit(col2, ',', i) IS NOT NULL;
    SET i = i + 1;
    UNTIL ROW_COUNT() = 0
  END REPEAT;
END $$

DELIMITER ;
로그인 후 복사

이 저장 프로시저를 사용하려면 다음 쿼리를 실행할 수 있습니다.

CALL BadTableToGoodTable();
로그인 후 복사

이렇게 하면 원하는 데이터가 담긴 'GoodTable'이라는 새 테이블.

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

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿