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

SQL 열의 구분된 값을 여러 행으로 분할하는 방법은 무엇입니까?

Patricia Arquette
Patricia Arquette원래의
2025-01-03 18:33:43293검색

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

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

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