Ich suche nach einer integrierten Funktion / erweiterten Funktion in T-SQL für die Zeichenfolgenmanipulation ähnlich der String.Format
Methode in .NET.
88
Wenn Sie SQL Server 2012 und höher verwenden, können Sie verwenden FORMATMESSAGE
. z.B.
DECLARE @s NVARCHAR(50) = 'World';
DECLARE @d INT = 123;
SELECT FORMATMESSAGE('Hello %s, %d', @s, @d)
-- RETURNS 'Hello World, 123'
Weitere Beispiele aus MSDN: FORMATMESSAGE
SELECT FORMATMESSAGE('Signed int %i, %d %i, %d, %+i, %+d, %+i, %+d', 5, -5, 50, -50, -11, -11, 11, 11);
SELECT FORMATMESSAGE('Signed int with leading zero %020i', 5);
SELECT FORMATMESSAGE('Signed int with leading zero 0 %020i', -55);
SELECT FORMATMESSAGE('Unsigned int %u, %u', 50, -50);
SELECT FORMATMESSAGE('Unsigned octal %o, %o', 50, -50);
SELECT FORMATMESSAGE('Unsigned hexadecimal %x, %X, %X, %X, %x', 11, 11, -11, 50, -50);
SELECT FORMATMESSAGE('Unsigned octal with prefix: %#o, %#o', 50, -50);
SELECT FORMATMESSAGE('Unsigned hexadecimal with prefix: %#x, %#X, %#X, %X, %x', 11, 11, -11, 50, -50);
SELECT FORMATMESSAGE('Hello %s!', 'TEST');
SELECT FORMATMESSAGE('Hello %20s!', 'TEST');
SELECT FORMATMESSAGE('Hello %-20s!', 'TEST');
SELECT FORMATMESSAGE('Hello %20s!', 'TEST');
ANMERKUNGEN:
FORMATMESSAGE
als (harmloser) Fehler angezeigt
msg_number
.string.Format
In T-SQL gibt es keine Funktionalität im Stil, dies ist die nächstgelegene, die Sie erhalten.Schauen Sie sich xp_sprintf an . Beispiel unten.
Ergebnis sieht so aus:
Ich habe gerade ein Problem mit der maximalen Größe (maximal 255 Zeichen) der Zeichenfolge gefunden, sodass Sie eine alternative Funktion verwenden können:
Um das gleiche Ergebnis wie oben zu erhalten, rufen Sie die Funktion wie folgt auf:
quelle
Ich habe eine benutzerdefinierte Funktion erstellt, um die Funktion string.format nachzuahmen. Du kannst es benutzen.
stringformat-in-sql
quelle
Es gibt einen Weg, aber er hat seine Grenzen. Sie können die
FORMATMESSAGE()
Funktion verwenden. Sie können eine Zeichenfolge mit einer Formatierung formatieren, die derprintf()
Funktion in C ähnelt .Die größte Einschränkung besteht jedoch darin, dass nur Nachrichten in der Tabelle sys.messages verwendet werden. Hier ist ein Artikel darüber: microsoft_library_ms186788
Es ist eine Schande, dass es keinen einfacheren Weg gibt, dies zu tun, da es Zeiten gibt, in denen Sie einen String / Varchar in der Datenbank formatieren möchten. Hoffentlich möchten Sie eine Zeichenfolge nur auf standardmäßige Weise formatieren und können die
sys.messages
Tabelle verwenden.Zufälligerweise können Sie die
RAISERROR()
Funktion auch mit einem sehr geringen Schweregrad verwenden. In der Dokumentation für Raiseerror wird dies sogar erwähnt, aber die Ergebnisse werden nur gedruckt. Mit dem resultierenden Wert könnten Sie also nichts anfangen (soweit ich weiß).Viel Glück!
quelle
FORMATMESSAGE()
ist falsch, jedoch verständlich, da sie nicht dokumentiert ist, aber eine beliebige Zeichenfolge als ersten Parameter akzeptiert . Siehe diese Antwort von @ g2server .Raw t-sql ist für die Zeichenfolgenmanipulation auf CHARINDEX (), PATINDEX (), REPLACE () und SUBSTRING () beschränkt. Mit SQL Server 2005 und höher können Sie jedoch benutzerdefinierte Funktionen einrichten, die in .Net ausgeführt werden. Das Einrichten einer UDF für string.format () sollte daher nicht zu schwierig sein.
quelle
Noch eine Idee.
Obwohl dies keine universelle Lösung ist - es ist einfach und funktioniert zumindest für mich :)
Für einen Platzhalter {0}:
Für zwei Platzhalter {0} und {1}:
Für drei Platzhalter {0}, {1} und {2}:
und so weiter...
Ein solcher Ansatz ermöglicht es uns, diese Funktionen in der SELECT-Anweisung und mit Parametern der Datentypen nvarchar, number, bit und datetime zu verwenden.
Beispielsweise:
quelle
Ich denke, es gibt eine kleine Korrektur bei der Berechnung der Endposition.
Hier ist die richtige Funktion
quelle
Hier ist meine Version. Kann erweitert werden, um mehr Parameter aufzunehmen, und kann die Formatierung basierend auf dem Typ erweitern. Derzeit werden nur Datums- und Datums- / Uhrzeittypen formatiert.
Beispiel:
Ausgabe:
Funktionen:
quelle
Folgendes habe ich bei meinen Experimenten mit dem eingebauten Gerät gefunden
FORMATMESSAGE () Funktion
Wenn Sie sp_addmessage aufrufen, wird Ihre Nachrichtenvorlage in der Systemtabelle master.dbo.sysmessages gespeichert (überprüft auf SQLServer 2000).
Sie müssen das Hinzufügen und Entfernen von Vorlagenzeichenfolgen aus der Tabelle selbst verwalten. Dies ist umständlich, wenn Sie nur eine kurze Nachricht an den Ergebnisbildschirm ausgeben möchten.
Die von Kathik DV bereitgestellte Lösung sieht interessant aus, funktioniert aber nicht mit SQL Server 2000, daher habe ich sie ein wenig geändert, und diese Version sollte mit allen Versionen von SQL Server funktionieren:
Verwendung:
quelle
Im Moment existiert dies nicht wirklich (obwohl Sie natürlich Ihre eigenen schreiben können). Es gibt einen offenen Verbindungsfehler: https://connect.microsoft.com/SQLServer/Feedback/Details/3130221 , der zum jetzigen Zeitpunkt nur 1 Stimme hat.
quelle
Tatsächlich gibt es keine integrierte Funktion, die der Zeichenfolge ähnelt. Die Formatfunktion von .NET ist in SQL Server verfügbar.
Es gibt eine Funktion FORMATMESSAGE () in SQL Server, die jedoch die Funktion printf () von C nachahmt, nicht string.Format von .NET.
quelle
Nicht genau, aber ich würde einige der Artikel über String-Handling (unter anderem) von "Phil Factor" (geddit?) Auf Simple Talk lesen.
quelle
Das ist ein schlechter Ansatz. Sie sollten mit Assembly-DLLs arbeiten, in denen Sie dasselbe mit besserer Leistung tun.
quelle