집 >데이터 베이스 >MySQL 튜토리얼 >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 중국어 웹사이트의 기타 관련 기사를 참조하세요!