Heim > Datenbank > MySQL-Tutorial > Wie repliziere ich die SUBSTRING_INDEX()-Funktion von MySQL in SQL Server?

Wie repliziere ich die SUBSTRING_INDEX()-Funktion von MySQL in SQL Server?

Susan Sarandon
Freigeben: 2024-11-16 01:36:02
Original
942 Leute haben es durchsucht

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

SQL Server-Äquivalent der SUBSTRING_INDEX()-Funktion von MySQL

Die MySQL-Funktion SUBSTRING_INDEX() extrahiert eine Teilzeichenfolge aus einer bestimmten Zeichenfolge basierend auf der Zahl der Vorkommen eines bestimmten Trennzeichens. Um diese Funktionalität in SQL Server zu replizieren, können mehrere Ansätze verwendet werden.

Eine Methode beinhaltet die Nutzung von T-SQL und XQuery, um eine Skalarfunktion zu erstellen:

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
Nach dem Login kopieren

Ein anderer Ansatz verwendet eine Inline-Tabelle -wertige Funktion in 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
Nach dem Login kopieren

Beide Lösungen bieten effiziente Alternativen zur SUBSTRING_INDEX()-Funktion von MySQL. Ermöglicht die nahtlose Portierung von Abfragen zwischen den beiden Datenbanksystemen.

Das obige ist der detaillierte Inhalt vonWie repliziere ich die SUBSTRING_INDEX()-Funktion von MySQL in SQL Server?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage