집 >데이터 베이스 >MySQL 튜토리얼 >SQL 열의 구분된 값을 여러 행으로 분할하는 방법은 무엇입니까?
SQL 열의 구분된 값을 여러 행으로 분할
SQL 열에 구분된 데이터가 포함된 상황에서는 다음을 추출해야 할 수도 있습니다. 값의 형식을 여러 행으로 지정합니다. 이 작업은 대용량 데이터나 매우 긴 구분 문자열을 처리할 때 특히 까다롭습니다.
다음 예를 고려하십시오.
소스 테이블
message-id | recipient-address |
---|---|
[email protected] | [email protected] |
[email protected] | [email protected] |
[email protected] | [email protected];[email protected];[email protected] |
원함 출력
message-id | recipient-address |
---|---|
[email protected] | [email protected] |
[email protected] | [email protected] |
[email protected] | [email protected] |
[email protected] | [email protected] |
[email protected] | [email protected] |
SQL Server 버전 2016 이상의 경우 STRING_SPLIT 함수는 간단한 솔루션을 제공합니다.
SELECT s.[message-id], f.value FROM dbo.SourceData AS s CROSS APPLY STRING_SPLIT(s.[recipient-address], ';') AS f;
SQL Server 2016 이전에는 사용자 지정 분할 함수를 사용할 수 있습니다. 생성됨:
CREATE FUNCTION dbo.SplitStrings ( @List NVARCHAR(MAX), @Delimiter NVARCHAR(255) ) RETURNS TABLE AS RETURN (SELECT Number = ROW_NUMBER() OVER (ORDER BY Number), Item FROM (SELECT Number, Item = LTRIM(RTRIM(SUBSTRING(@List, Number, CHARINDEX(@Delimiter, @List + @Delimiter, Number) - Number))) FROM (SELECT ROW_NUMBER() OVER (ORDER BY s1.[object_id]) FROM sys.all_objects AS s1 CROSS APPLY sys.all_objects) AS n(Number) WHERE Number <= CONVERT(INT, LEN(@List)) AND SUBSTRING(@Delimiter + @List, Number, 1) = @Delimiter ) AS y); GO
분할 기능을 사용하면 데이터를 추출 및 서식 지정:
SELECT s.[message-id], f.Item FROM dbo.SourceData AS s CROSS APPLY dbo.SplitStrings(s.[recipient-address], ';') AS f;
이러한 기술을 활용하면 구분된 값을 여러 행으로 효율적으로 분할하여 데이터 서식 지정 및 분석 작업을 단순화할 수 있습니다.
위 내용은 SQL 열의 구분된 값을 여러 행으로 분할하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!