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
Susan SarandonOriginal
2024-11-16 01:36:02912Durchsuche

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

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

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!

Stellungnahme:
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