Ich habe die folgende Tabelle A:
id
----
1
2
12
123
1234
Ich muss die id
Werte mit Nullen auffüllen:
id
----
0001
0002
0012
0123
1234
Wie kann ich das erreichen?
Ich glaube, das ist vielleicht das, wonach Sie suchen:
SELECT padded_id = REPLACE(STR(id, 4), SPACE(1), '0')
FROM tableA
oder
SELECT REPLACE(STR(id, 4), SPACE(1), '0') AS [padded_id]
FROM tableA
Ich habe die Syntax im zweiten Beispiel nicht getestet. Ich bin mir nicht sicher, ob dies zu 100% funktioniert - möglicherweise sind einige Anpassungen erforderlich -, aber es vermittelt die allgemeine Vorstellung, wie Sie die gewünschte Ausgabe erhalten.
BEARBEITEN
Um die in den Kommentaren aufgeführten Bedenken auszuräumen ...
@ pkr298 - Ja STR funktioniert nur mit Zahlen ... Das Feld des OP ist eine ID ... daher nur mit Zahlen.
@Desolator - Das funktioniert natürlich nicht ... der erste Parameter ist 6 Zeichen lang. Sie können so etwas tun wie:
SELECT REPLACE(STR(id,
(SELECT LEN(MAX(id)) + 4 FROM tableA)), SPACE(1), '0') AS [padded_id] FROM tableA
Dies sollte theoretisch die Torpfosten verschieben ... wenn die Zahl größer wird, sollte es IMMER funktionieren ... unabhängig davon, ob es 1 oder 123456789 ist ...
Wenn Ihr Maximalwert also 123456 ist ... würden Sie 0000123456 sehen und wenn Ihr Minimalwert 1 ist, würden Sie 0000000001 sehen
STR(123456, 4)
****
SQL Server unterstützt jetzt die FORMAT- Funktion ab Version 2012, also:
wird den Trick machen.
Wenn sich Ihre ID oder Spalte in a befindet
varchar
und eine Zahl darstellt, die Sie zuerst konvertieren:quelle
Ergebnis
quelle
Alter Beitrag, aber vielleicht hilft das jemandem:
So vervollständigen Sie, bis 4 nicht leere Zeichen angezeigt werden:
Bis 10 abschließen:
Wenn die Spalte numerisch ist , konvertieren Sie sie zuerst mit folgendem Code in varchar:
Und um bis 10 mit einem numerischen Feld zu vervollständigen:
quelle
Versuche dies:
quelle
- Bitte schauen Sie sich diese an.
- Ich hoffe, diese würden Ihnen helfen
quelle
Dies funktioniert für Zeichenfolgen, Ganzzahlen und Zahlen:
SELECT CONCAT(REPLICATE('0', 4 - LEN(id)), id)
Wo
4
ist die gewünschte Länge. Funktioniert für Zahlen mit mehr als 4 Ziffern und gibt eine leere Zeichenfolge für denNULL
Wert zurück.quelle
Wenn noch jemand interessiert ist, habe ich diesen Artikel auf DATABASE.GUIDE gefunden:
Left Padding in SQL Server - 3 LPAD () -Äquivalenten
Kurz gesagt, in diesem Artikel werden drei Methoden erwähnt.
Angenommen, Ihre ID ist = 12 und muss als 0012 angezeigt werden.
Methode 1 - Verwenden der Funktion RIGHT ()
Die erste Methode verwendet die Funktion RIGHT (), um nach dem Hinzufügen einiger führender Nullen nur den am weitesten rechts stehenden Teil der Zeichenfolge zurückzugeben.
SELECT RIGHT('00' + '12', 4);
Ergebnis:
0012
Methode 2 - Verwenden Sie eine Kombination aus RIGHT () und REPLICATE ().
Diese Methode ist fast dieselbe wie die vorherige Methode. Der einzige Unterschied besteht darin, dass ich die drei Nullen einfach durch die Funktion REPLICATE () ersetze:
SELECT RIGHT(REPLICATE('0', 2) + '12', 4);
Ergebnis:
0012
Methode 3 - Verwenden Sie eine Kombination aus REPLACE () und STR ().
Diese Methode hat einen völlig anderen Blickwinkel als die vorherigen Methoden:
SELECT REPLACE(STR('12', 4),' ','0');
Ergebnis:
0012
Schauen Sie sich den Artikel an, es gibt eine eingehendere Analyse mit Beispielen.
quelle
Dies ist, was ich normalerweise verwende, wenn ich einen Wert auffüllen muss.
quelle
Ich brauchte dies in einer Funktion auf SQL Server und passte Patricks Antwort ein wenig an.
quelle
Funktion erstellen:
Beispiel:
quelle
SELECT @var = LTRIM(RTRIM(@Text))
Ich habe eine Funktion erstellt:
Verwendung: Wählen Sie dbo.fnPadLeft (123, 10).
Rückgabe: 0000000123
quelle
Bei Bedarf kann Folgendes ziemlich ODBC-konform sein:
Dies basiert auf der Tatsache, dass die Anzahl der Ziffern für eine Basis-10-Zahl durch die integrale Komponente ihres Protokolls ermittelt werden kann. Davon können wir es von der gewünschten Polsterbreite abziehen. Wiederholen wird
null
für Werte unter 1 zurückgegeben, also brauchen wirifnull
.quelle
Meine Lösung ist nicht effizient, hat mir aber in Situationen geholfen, in denen die Werte (Bankschecknummern und Überweisungsnummer) als varchar gespeichert wurden, wobei einige Einträge alphanumerische Werte enthielten und ich auffüllen musste, wenn die Länge kleiner als 6 Zeichen ist.
Dachte zu teilen, wenn jemand auf die gleiche Situation stößt
quelle
Ein einfaches Beispiel wäre
quelle
Dazu habe ich eine Funktion erstellt, in der Sie die gewünschte Länge der Ausgabezeichen angeben können:
Beispielergebnisse
quelle
Effizienter ist:
quelle