>데이터 베이스 >MySQL 튜토리얼 >SQL에서 구분된 수신자 주소를 여러 행으로 분할하는 방법은 무엇입니까?

SQL에서 구분된 수신자 주소를 여러 행으로 분할하는 방법은 무엇입니까?

DDD
DDD원래의
2024-12-31 19:18:11658검색

How to Split Delimited Recipient Addresses in SQL into Multiple Rows?

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

문제 설명:
Exchange 2007을 삽입할 때 메시지 추적은 구분된 수신자 주소의 수신자를 SQL 테이블에 기록합니다. 열에 여러 값이 포함되는 경우가 있습니다. 사용자는 원래 메시지 ID 연결을 유지하면서 이러한 값을 다른 테이블의 별도 행으로 분할하려고 합니다.

해결책:

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 Pre-2016
사용자 지정 분할 함수 dbo.SplitStrings 생성:

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);

데이터 조작:

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으로 문의하세요.