>데이터 베이스 >MySQL 튜토리얼 >SQL 열의 구분된 값을 여러 행으로 분할하려면 어떻게 해야 합니까?

SQL 열의 구분된 값을 여러 행으로 분할하려면 어떻게 해야 합니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-04 11:43:35715검색

How Can I Split Delimited Values in a SQL Column into Multiple Rows?

SQL 열의 구분된 값을 여러 행으로 분할

SQL 열의 구분 기호는 값을 여러 행으로 분할하려고 할 때 문제를 일으킬 수 있습니다. 행. 이 문서에서는 최신 버전과 레거시 버전의 SQL Server에 대한 솔루션을 제공합니다.

SQL Server 2016 및 최신

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;

2016년 이전의 SQL Server 버전

이전 버전의 SQL Server의 경우 다음과 같은 분할 함수를 만듭니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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