집 >데이터 베이스 >MySQL 튜토리얼 >SQL 열의 구분된 값을 여러 행으로 효율적으로 분할하는 방법은 무엇입니까?
SQL 열의 구분된 값을 여러 행으로 분할
수신자와 같이 단일 열에 구분된 값이 포함된 테이블을 처리할 때 -세미콜론(;)으로 구분된 주소 필드의 경우 추가 처리 또는 분석을 위해 이러한 값을 여러 행으로 분할해야 합니다. 이 문서에서는 특히 성능 및 효율성 최적화에 중점을 두고 SQL을 사용하여 이를 달성하는 다양한 방법을 살펴봅니다.
SQL Server 2016용 STRING_SPLIT 함수 사용
SQL Server를 사용하는 경우 2016 이상에서는 STRING_SPLIT 함수를 활용하여 구분된 값을 효율적으로 분할할 수 있습니다. 이 함수의 구문은 다음과 같습니다.
STRING_SPLIT(@list, @delimiter)
다음은 STRING_SPLIT를 사용하여 수신자 주소를 별도의 행으로 추출하는 방법입니다.
SELECT [message-id], value FROM dbo.SourceData CROSS APPLY STRING_SPLIT([recipient-address], ';') AS f;
Pre에 대한 분할 함수 생성 -SQL Server 2016 버전
SQL Server 2016 이전 버전의 경우 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 [message-id], f.Item FROM dbo.SourceData CROSS APPLY dbo.SplitStrings([recipient-address], ';') AS f;
최적화 및 고려 사항
최적의 성능을 보장하려면 다음 사항을 고려하세요. 팁:
위 내용은 SQL 열의 구분된 값을 여러 행으로 효율적으로 분할하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!