Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Meniru Fungsi SUBSTRING_INDEX() MySQL dalam Pelayan SQL?

Bagaimana untuk Meniru Fungsi SUBSTRING_INDEX() MySQL dalam Pelayan SQL?

Susan Sarandon
Lepaskan: 2024-11-16 01:36:02
asal
888 orang telah melayarinya

How to Replicate MySQL's SUBSTRING_INDEX() Function in SQL Server?

SQL Server Setara dengan Fungsi SUBSTRING_INDEX() MySQL

Fungsi MySQL SUBSTRING_INDEX() mengekstrak subrentetan daripada rentetan yang diberikan berdasarkan nombor kejadian pembatas tertentu. Untuk meniru fungsi ini dalam SQL Server, beberapa pendekatan boleh digunakan.

Satu kaedah melibatkan memanfaatkan T-SQL dan XQuery untuk mencipta fungsi skalar:

CREATE FUNCTION dbo.SUBSTRING_INDEX
(
    @str NVARCHAR(4000),
    @delim NVARCHAR(1),
    @count INT
)
RETURNS NVARCHAR(4000)
WITH SCHEMABINDING
BEGIN
    DECLARE @XmlSourceString XML;
    SET @XmlSourceString = (SELECT N'<root><row>' + REPLACE( (SELECT @str AS '*' FOR XML PATH('')) , @delim, N'</row><row>' ) + N'</row></root>');

    RETURN STUFF
    (
        ((
            SELECT  @delim + x.XmlCol.value(N'(text())[1]', N'NVARCHAR(4000)') AS '*'
            FROM    @XmlSourceString.nodes(N'(root/row)[position() <= sql:variable("@count")]') x(XmlCol)
            FOR XML PATH(N''), TYPE
        ).value(N'.', N'NVARCHAR(4000)')), 
        1, 1, N''
    );
END
GO
Salin selepas log masuk

Pendekatan lain menggunakan jadual sebaris -fungsi bernilai dalam TSQL:

CREATE FUNCTION dbo.SUBSTRING_INDEX
(
    @str NVARCHAR(4000),
    @delim NVARCHAR(1),
    @count INT
)
RETURNS TABLE
AS 
RETURN
    WITH Base
    AS 
    (
        SELECT XmlSourceString = CONVERT(XML, (SELECT N'<root><row>' + REPLACE( (SELECT @str AS '*' FOR XML PATH('')) , @delim, N'</row><row>' ) + N'</row></root>'))
    )   
    SELECT STUFF
    (
        ((
            SELECT  @delim + x.XmlCol.value(N'(text())[1]', N'NVARCHAR(4000)') AS '*'
            FROM    Base b 
            CROSS APPLY b.XmlSourceString.nodes(N'(root/row)[position() <= sql:variable("@count")]') x(XmlCol)
            FOR XML PATH(N''), TYPE
        ).value(N'.', N'NVARCHAR(4000)')), 
        1, 1, N''
    ) AS Result;
GO
Salin selepas log masuk

Kedua-dua penyelesaian ini menyediakan alternatif yang cekap kepada Fungsi SUBSTRING_INDEX() MySQL, membolehkan pemindahan pertanyaan yang lancar antara kedua-dua sistem pangkalan data.

Atas ialah kandungan terperinci Bagaimana untuk Meniru Fungsi SUBSTRING_INDEX() MySQL dalam Pelayan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan