Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Memisahkan Alamat Penerima Terhad dalam SQL kepada Berbilang Baris?

Bagaimana untuk Memisahkan Alamat Penerima Terhad dalam SQL kepada Berbilang Baris?

DDD
DDDasal
2024-12-31 19:18:11649semak imbas

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

Memisahkan Nilai Terhad dalam Lajur SQL kepada Berbilang Baris

Pernyataan Masalah:
Apabila memasukkan Exchange 2007 Penjejakan Mesej log masuk ke dalam jadual SQL, penerima dalam sempadan lajur alamat penerima kadangkala mengandungi berbilang nilai. Pengguna ingin membahagikan nilai ini kepada baris berasingan dalam jadual lain sambil mengekalkan perkaitan id mesej asal.

Penyelesaian:

SQL Server 2016
Menggunakan STRING_SPLIT baharu fungsi:

SELECT s.[message-id], f.value
  FROM dbo.SourceData AS s
  CROSS APPLY STRING_SPLIT(s.[recipient-address], ';') as f;

SQL Server Pra-2016
Mencipta fungsi split tersuai 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);

Manipulasi Data:

SELECT s.[message-id], f.Item
  FROM dbo.SourceData AS s
  CROSS APPLY dbo.SplitStrings(s.[recipient-address], ';') as f;

Atas ialah kandungan terperinci Bagaimana untuk Memisahkan Alamat Penerima Terhad dalam SQL kepada Berbilang Baris?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn