>데이터 베이스 >MySQL 튜토리얼 >SQL에서 열의 데이터를 여러 행으로 분할하는 방법은 무엇입니까?

SQL에서 열의 데이터를 여러 행으로 분할하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-05 07:03:42382검색

How to Split a Column's Data into Multiple Rows in SQL?

SQL에서 열 데이터를 행으로 분할하는 방법은 무엇입니까?

관계형 데이터베이스로 작업할 때 열 데이터를 분할해야 하는 상황이 발생할 수 있습니다. 단일 열의 데이터를 여러 행으로 변환합니다. 이 기술은 쉼표로 구분된 항목 목록을 개별 행으로 분리하는 등의 시나리오에 특히 유용합니다.

이를 달성하려면 SQL에서 강력한 문자열 조작 기능을 활용할 수 있습니다. 열 데이터를 행으로 분할하는 두 가지 방법을 살펴보겠습니다.

1. 분할 함수 사용:

쉼표나 세미콜론과 같은 특정 구분 기호를 기준으로 열 데이터를 나누는 사용자 정의 분할 함수를 만들 수 있습니다. 사용할 수 있는 샘플 기능은 다음과 같습니다.

CREATE FUNCTION [dbo].[Split](@String VARCHAR(MAX), @Delimiter CHAR(1))
RETURNS @temptable TABLE (items VARCHAR(MAX))
AS
BEGIN
    DECLARE @idx INT
    DECLARE @slice VARCHAR(8000)

    SELECT @idx = 1
    IF LEN(@String)<1 OR @String IS NULL RETURN

    WHILE @idx!= 0
    BEGIN
        SET @idx = CHARINDEX(@Delimiter,@String)
        IF @idx!=0
            SET @slice = LEFT(@String,@idx - 1)
        ELSE
            SET @slice = @String

        IF(LEN(@slice)>0)
            INSERT INTO @temptable(Items) VALUES(@slice)

        SET @String = RIGHT(@String,LEN(@String) - @idx)
        IF LEN(@String) = 0 BREAK
    END

    RETURN
END;

2. 재귀 CTE 사용:

또는 재귀 CTE(공용 테이블 표현식)를 사용하여 동일한 결과를 얻을 수 있습니다. CTE 솔루션은 다음과 같습니다.

WITH cte (code, DeclarationItem, Declaration) AS
(
  SELECT Code,
    CAST(LEFT(Declaration, CHARINDEX(',',Declaration+',')-1) AS VARCHAR(50)) DeclarationItem,
         STUFF(Declaration, 1, CHARINDEX(',',Declaration+','), '') Declaration
  FROM yourtable
  UNION ALL
  SELECT code,
    CAST(LEFT(Declaration, CHARINDEX(',',Declaration+',')-1) AS VARCHAR(50)) DeclarationItem,
    STUFF(Declaration, 1, CHARINDEX(',',Declaration+','), '') Declaration
  FROM cte
  WHERE Declaration > ''
)
SELECT code, DeclarationItem
FROM cte

사용 예:

'yourtable' 테이블의 'Declaration' 열을 개별 행으로 분할하려면 다음 중 하나를 사용할 수 있습니다. 위의 방법 중. 예:

SELECT t1.code, s.items AS declaration
FROM yourtable t1
OUTER APPLY dbo.split(t1.declaration, ',') s

이 쿼리는 '선언' 열이 각 항목에 대해 별도의 행으로 분할되는 결과를 생성합니다.

위 내용은 SQL에서 열의 데이터를 여러 행으로 분할하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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