Ich habe eine Zeichenfolge, die bis zu 3 Zeichen lang ist, wenn sie zum ersten Mal in SQL Server 2008 R2 erstellt wird.
Ich möchte es mit führenden Nullen auffüllen. Wenn also sein ursprünglicher Wert '1' wäre, wäre der neue Wert '001'. Oder wenn der ursprüngliche Wert '23' war, ist der neue Wert '023'. Oder wenn der ursprüngliche Wert '124' ist, entspricht der neue Wert dem ursprünglichen Wert.
Ich verwende SQL Server 2008 R2. Wie würde ich das mit T-SQL machen?
sql-server
tsql
Sunil
quelle
quelle
Antworten:
Wenn das Feld bereits eine Zeichenfolge ist, funktioniert dies
Wenn Sie möchten, dass Nullen als '000' angezeigt werden
Es könnte eine ganze Zahl sein - dann würden Sie wollen
quelle
Obwohl die Frage für SQL Server 2008 R2 war, wurde sie durch die Verwendung von FORMAT viel einfacher, falls jemand dies mit Version 2012 und höher liest .
Sie können entweder eine Standardzeichenfolge im numerischen Format oder eine benutzerdefinierte Zeichenfolge im numerischen Format als Formatargument übergeben (danke Vadim Ovchinnikov für diesen Hinweis).
Für diese Frage zum Beispiel ein Code wie
Ausgänge
quelle
Die sichere Methode:
Dies hat den Vorteil, dass die Zeichenfolge
'***'
für n <0 oder n> 999 zurückgegeben wird, was ein netter und offensichtlicher Indikator für die Eingabe außerhalb der Grenzen ist. Die anderen hier aufgeführten Methoden schlagen stillschweigend fehl, indem die Eingabe in eine dreistellige Teilzeichenfolge abgeschnitten wird.quelle
SELECT REPLACE(STR('1',3),' ','0')
Pausen :SELECT REPLACE(STR('1A',3),' ','0')
. Dies hat mich heute verbrannt, als ein Benutzer einen Buchstaben in die Eingabezeichenfolge eingegeben hat und ich diesen Fall nicht testen konnte.Hier ist eine allgemeinere Technik zum Auffüllen der linken Seite auf eine beliebige gewünschte Breite:
Wenn Sie jedoch mit negativen Werten arbeiten und mit führenden Nullen auffüllen, funktionieren weder diese noch andere vorgeschlagene Techniken. Sie erhalten etwas, das so aussieht:
[Wahrscheinlich nicht das, was du wolltest]
Also ... Sie müssen durch einige zusätzliche Rahmen springen. Hier ist ein Ansatz, mit dem negative Zahlen richtig formatiert werden:
Man sollte beachten, dass die
convert()
Aufrufe eine[n]varchar
ausreichende Länge angeben sollten, um das konvertierte Ergebnis mit Kürzung zu halten.quelle
Hier ist eine Variante von Hogans Antwort, die ich in SQL Server Express 2012 verwende:
Anstatt mir Sorgen zu machen, ob das Feld eine Zeichenfolge ist oder nicht,
CONCAT
mache ich es einfach , da es sowieso eine Zeichenfolge ausgibt. Wenn das Feld ein Feld sein kann, ist möglicherweise eineNULL
VerwendungISNULL
erforderlich, um zu vermeiden, dass die FunktionNULL
Ergebnisse erzielt.quelle
Ich habe die folgende Methode immer als sehr hilfreich empfunden.
quelle
Verwenden Sie diese Funktion, die für jede Situation geeignet ist.
Beispielausgabe
quelle
DECLARE @NumStr VARCHAR(250) = '2016'; SELECT REPLICATE('0', 12 - LEN(@NumStr)) + @NumStr;
gibt Salars erstes Beispiel oben zurück. Danke Salar.DECLARE @NumStr VARCHAR(250) = '2016'; SELECT REPLICATE('0', 10 - LEN(@NumStr)) + @NumStr;
der0000002016
im ersten Beispiel oben zurückkehrt.Für diejenigen, die ihre vorhandenen Daten aktualisieren möchten, ist hier die Abfrage:
quelle
Für Ganzzahlen können Sie die implizite Konvertierung von int nach varchar verwenden:
quelle
Ich kenne das alte Ticket, von dem ich nur dachte, dass ich es teilen möchte.
Ich habe diesen Code gefunden und nach einer Lösung gesucht. Ich bin mir nicht sicher, ob es auf allen Versionen von MSSQL funktioniert. Ich habe MSSQL 2016.
gibt "0023" zurück. Die 4 in der STR-Funktion ist die Gesamtlänge einschließlich des Werts. Beispiel 4, 23 und 123 haben alle 4 in STR und die richtige Anzahl von Nullen wird hinzugefügt. Sie können es erhöhen oder verringern. Keine Notwendigkeit, die Länge auf dem 23 zu bekommen.
Bearbeiten: Ich sehe es das gleiche wie @Anon Post.
quelle
Ich hatte ein ähnliches Problem mit der Ganzzahlspalte als Eingabe, als ich eine Varchar- (oder String-) Ausgabe mit fester Größe benötigte. Zum Beispiel 1 bis '01', 12 bis '12'. Dieser Code funktioniert:
Wenn die Eingabe auch eine Spalte von Varchar ist, können Sie das Gussteil vermeiden.
quelle
Versuchen Sie dies für einen dynamischeren Ansatz.
quelle
Versuchen Sie dies mit fester Länge.
quelle
Schrieb dies, weil ich Anforderungen für bis zu einer bestimmten Länge hatte (9). Füllt die linke Seite NUR mit dem @ Muster auf, wenn die Eingabe aufgefüllt werden muss. Sollte immer die in @pattern definierte Länge zurückgeben.
Gibt 1234input zurück
quelle
Einfach ist das
Mögen:
quelle
Ich bin speziell hierher gekommen, um herauszufinden, wie ich meinen Zeitzonenversatz in eine Zeitzonenzeichenfolge konvertieren kann, um Datumsangaben in SQL Server 2008 in DATETIMEOFFSET zu konvertieren. Brutto, aber notwendig.
Ich brauche also eine Methode, die negative und positive Zahlen verarbeitet und sie bei Bedarf auf zwei Zeichen mit einer führenden Null formatiert. Anons Antwort brachte mich in die Nähe, aber negative Zeitzonenwerte würden
0-5
eher als die erforderlichen herauskommen-05
Mit ein wenig Optimierung seiner Antwort funktioniert dies für alle Zeitzonen-Stunden-Konvertierungen
quelle
Ich habe diese Funktion erstellt, die Bigint und eine führende Null oder ein anderes einzelnes Zeichen (maximal 20 zurückgegebene Zeichen) berücksichtigt und eine Länge von Ergebnissen zulässt, die kleiner als die Länge der eingegebenen Nummer ist:
quelle