Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Membahagikan Nilai Terhad dalam Lajur SQL kepada Berbilang Baris?

Bagaimanakah Saya Boleh Membahagikan Nilai Terhad dalam Lajur SQL kepada Berbilang Baris?

Barbara Streisand
Barbara Streisandasal
2025-01-04 11:43:35715semak imbas

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

Memisahkan Nilai Terhad dalam Lajur SQL kepada Berbilang Baris

Pembatas dalam lajur SQL boleh mencipta cabaran apabila cuba membahagikan nilai kepada berbilang barisan. Artikel ini menyediakan penyelesaian untuk kedua-dua versi terbaru dan versi lama bagi SQL Server.

SQL Server 2016 dan Newer

SQL Server 2016 memperkenalkan fungsi STRING_SPLIT, membolehkan untuk memudahkan pemisahan nilai menggunakan yang berikut sintaks:

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

SQL Server Versions Sebelum 2016

Untuk versi SQL Server yang lebih lama, cipta fungsi pisah seperti:

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

Setelah fungsi split dicipta, anda boleh menggunakannya untuk mengekstrak nilai:

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

Petua:

Untuk storan dan rujukan yang optimum, elakkan menggunakan tanda sempang dalam nama lajur, kerana ia perlu disertakan dalam kurungan segi empat sama.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membahagikan Nilai Terhad dalam Lajur 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