Heim >Datenbank >MySQL-Tutorial >Wie repliziere ich die SUBSTRING_INDEX()-Funktion von MySQL 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!