Im Vergleich zu sagen:
REPLICATE(@padchar, @len - LEN(@str)) + @str
sql
sql-server
tsql
Cade Roux
quelle
quelle
Antworten:
Dies ist einfach eine ineffiziente Verwendung von SQL, egal wie Sie es tun.
vielleicht so etwas wie
Dabei ist X Ihr Auffüllzeichen und @n die Anzahl der Zeichen in der resultierenden Zeichenfolge (vorausgesetzt, Sie benötigen das Auffüllen, weil Sie es mit einer festen Länge zu tun haben).
Aber wie gesagt, Sie sollten dies in Ihrer Datenbank wirklich vermeiden.
quelle
RTRIM(@str)
tun, wenn dies nachgestellte Leerzeichen enthalten kann.Ich weiß, dass dies ursprünglich im Jahr 2008 gefragt wurde, aber es gibt einige neue Funktionen, die mit SQL Server 2012 eingeführt wurden. Die FORMAT-Funktion vereinfacht das Auffüllen mit Nullen. Es wird auch die Konvertierung für Sie durchführen:
Aktualisieren:
Ich wollte die tatsächliche Effizienz der FORMAT-Funktion selbst testen. Ich war ziemlich überrascht, dass die Effizienz im Vergleich zur ursprünglichen Antwort von AlexCuse nicht sehr gut war . Obwohl ich die FORMAT-Funktion sauberer finde, ist sie in Bezug auf die Ausführungszeit nicht sehr effizient. Die von mir verwendete Tally-Tabelle enthält 64.000 Datensätze. Ein großes Lob an Martin Smith für den Hinweis auf die Effizienz der Ausführungszeit.
SQL Server-Ausführungszeiten: CPU-Zeit = 2157 ms, verstrichene Zeit = 2696 ms.
SQL Server-Ausführungszeiten:
quelle
Mehrere Leute gaben Versionen davon:
Seien Sie vorsichtig damit, da Ihre tatsächlichen Daten abgeschnitten werden, wenn sie länger als n sind.
quelle
quelle
Vielleicht ein Over-Kill Ich habe diese UDFs, um links und rechts aufzufüllen
und nach rechts
quelle
Ich bin mir nicht sicher, ob die von Ihnen angegebene Methode wirklich ineffizient ist, aber eine alternative Methode, sofern sie nicht in der Länge oder im Auffüllcharakter flexibel sein muss, wäre (vorausgesetzt, Sie möchten sie auffüllen ". 0 "bis 10 Zeichen:
quelle
wahrscheinlich übertrieben, ich benutze oft diese UDF:
Damit Sie Dinge tun können wie:
quelle
Ich mochte die vnRocks-Lösung, hier ist sie in Form eines udf
quelle
Dies ist eine einfache Möglichkeit, links aufzufüllen:
Wo
x
ist die Pad-Nummer undy
ist das Pad-Zeichen.Stichprobe:
quelle
1
wird001
.quelle
In SQL Server 2005 und höher können Sie dazu eine CLR-Funktion erstellen.
quelle
Wie wäre es damit:
3 ist die Nummer des
zeros
Padsquelle
Ich hoffe das hilft jemandem.
quelle
Ich benutze diesen. Hier können Sie die Länge bestimmen, in der das Ergebnis angezeigt werden soll, sowie ein Standard-Füllzeichen, falls keines angegeben ist. Natürlich können Sie die Länge der Ein- und Ausgabe für jedes Maximum anpassen, auf das Sie stoßen.
Ihr Kilometerstand kann variieren. :-)
Joey Morgan
Programmierer / Analyst Principal I
Geschäftsbereich WellPoint Medicaid
quelle
Hier ist meine Lösung, die abgeschnittene Zeichenfolgen vermeidet und einfaches altes SQL verwendet. Vielen Dank an @AlexCuse , @Kevin und @Sklivvz , deren Lösungen die Grundlage dieses Codes bilden.
quelle
Ich weiß, dass dies zu diesem Zeitpunkt nicht viel zur Konversation beiträgt, aber ich führe eine Prozedur zur Dateierzeugung aus, die unglaublich langsam verläuft. Ich habe Replikat verwendet und diese Trimmmethode gesehen und dachte, ich würde es versuchen.
Sie können in meinem Code sehen, wo der Wechsel zwischen den beiden zusätzlich zu der neuen @ padding-Variablen (und der jetzt bestehenden Einschränkung) erfolgt. Ich habe meine Prozedur mit der Funktion in beiden Zuständen mit den gleichen Ergebnissen in der Ausführungszeit ausgeführt. Zumindest in SQLServer2016 sehe ich keinen Unterschied in der Effizienz, den andere festgestellt haben.
Wie auch immer, hier ist meine UDF, die ich vor Jahren geschrieben habe, sowie die Änderungen heute, die denen anderer sehr ähnlich sind, außer dass sie eine LINKS / RECHTS-Parameteroption und einige Fehlerprüfungen enthalten.
quelle
Ich habe eine Funktion, die mit x Dezimalstellen lpad: CREATE FUNCTION [dbo]. [LPAD_DEC] (- Fügen Sie hier die Parameter für die Funktion hinzu @pad nvarchar (MAX), @string nvarchar (MAX), @length int, @dec int ) RETURNS nvarchar (max) AS BEGIN - Deklarieren Sie die Rückgabevariable hier DECLARE @resp nvarchar (max)
ENDE
quelle
Um numerische Werte bereitzustellen, die auf zwei Dezimalstellen gerundet, aber bei Bedarf mit Nullen rechts aufgefüllt sind, habe ich:
Wenn sich jemand einen ordentlicheren Weg vorstellen kann, wäre das wünschenswert - das oben Gesagte scheint ungeschickt zu sein .
Hinweis : In diesem Fall verwende ich SQL Server, um Berichte im HTML-Format per E-Mail zu versenden, und möchte daher die Informationen formatieren, ohne ein zusätzliches Tool zum Parsen der Daten zu verwenden.
quelle
Hier ist, wie ich normalerweise einen Varchar auffüllen würde
quelle