Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Linke Auffüllung in SQL Server – 3 LPAD()-Äquivalente

Wenn Sie Oracle Database oder MySQL verwenden, haben Sie das Glück, das LPAD() zu haben und RPAD() Funktionen, mit denen Sie einen String mit einem bestimmten Zeichen (oder mehreren Zeichen) links und/oder rechts auffüllen können.

SQL Server (oder genauer gesagt T-SQL) enthält diese Funktionen jedoch nicht. Wenn Sie also eine linke Polsterung benötigen, müssen Sie improvisieren.

Dieser Artikel stellt vier Optionen zum Auffüllen einer Zahl mit führenden Nullen in SQL Server vor. So können Sie Sachen machen wie 7 drehen in 007 . Drei dieser Optionen funktionieren mit Zeichenfolgen, sodass Sie auch Textdaten auffüllen können.

Methode 1 – Verwenden Sie die FORMAT()-Funktion

Wenn Sie führende Nullen auf eine Zahl anwenden müssen, sollte diese Option alles sein, was Sie brauchen. Diese Option verwendet das FORMAT() Funktion. Diese Funktion gibt die Zahl als String in unserem angegebenen Format zurück:

SELECT FORMAT(7, '000');

Ergebnis:

007

In diesem Fall verwenden wir den 0 Formatbezeichner, um die Zahl gegebenenfalls mit führenden Nullen zu formatieren. Dies ist nur einer von vielen benutzerdefinierten Formatbezeichnern. Benutzerdefinierte Formatbezeichner ermöglichen es uns, sehr genau festzulegen, wie unsere Nummer formatiert ist.

Beachten Sie, dass FORMAT() Die Funktion ist nur für Zahlen und datetime-Werte. Wenn Sie also eine tatsächliche Zeichenfolge auffüllen müssen, lesen Sie weiter.

Methode 2 – Verwenden Sie die RIGHT()-Funktion

Die zweite Methode verwendet das RIGHT() Funktion, um nur den ganz rechten Teil der Zeichenfolge zurückzugeben, nachdem einige führende Nullen hinzugefügt wurden.

Obwohl ich hier führende Nullen auf eine „Zahl“ anwende, handelt es sich tatsächlich um eine Zeichenfolgendarstellung einer Zahl. Wenn Sie also eine Zeichenfolge anstelle einer Zahl auffüllen müssen, sollte diese Methode funktionieren.

SELECT RIGHT('000' + '1234', 7);

Ergebnis:

0001234

Die 7 gibt an, wie viele Zeichen das Endergebnis haben soll (nachdem die Nullen hinzugefügt wurden).

Reduzieren der Länge

Wenn wir also diese Zahl reduzieren, wird die Anzahl der führenden Nullen reduziert:

SELECT RIGHT('000' + '1234', 6);

Ergebnis:

001234

Erhöhen der Länge

Aber wenn wir die Zahl erhöhen, müssen wir sicherstellen, dass wir genügend Nullen angegeben haben, um die erforderliche Länge zu erreichen:

SELECT RIGHT('000000' + '1234', 10);

Ergebnis:

0000001234

Sonst landen wir hiermit:

SELECT RIGHT('000' + '1234', 10);

Ergebnis:

0001234

Abkürzung der Zahl

Beachten Sie auch, dass, wenn Sie nicht genügend Zeichen für die resultierende Zeichenfolgenlänge angeben, die Zahl abgeschnitten wird und Sie nur den ganz rechten Teil der Zahl erhalten:

SELECT RIGHT('000' + '1234', 2);

Ergebnis:

34

In diesem Fall wurde also die ursprüngliche Zahl abgeschnitten und die führenden Nullen wurden ignoriert.

Dies ist ein Szenario, bei dem sich das Ergebnis von dem von LPAD() von MySQL und Oracle unterscheidet Funktion. Diese Funktion hätte die ersten 2 (nicht aufgefüllten) Ziffern anstelle der letzten 2 Ziffern erzeugt. So:

SELECT LPAD(1234, 2, 0);

Ergebnis:

12

Wenn Sie eine SQL Server-Lösung benötigen, die sich wie LPAD() verhält Versuchen Sie in solchen Fällen Folgendes:

SELECT RIGHT(REPLICATE('0', 3) + LEFT('1234', 2), 2);

Ergebnis:

12

Beachten Sie jedoch, dass Sie dasselbe Ergebnis erhalten, indem Sie einfach LEFT() verwenden Funktion für sich:

SELECT LEFT('1234', 2);

Ergebnis:

12

Außerdem fällt mir schwer ein Grund ein, warum jemand die Nummer kürzen möchte (wenn man bedenkt, dass sie versuchen, sie aufzufüllen), aber zumindest ist dies etwas, das man in Betracht ziehen sollte.

Methode 3 – Verwenden Sie eine Kombination aus RIGHT() und REPLICATE()

Diese Methode ist fast die gleiche wie die vorherige Methode, mit dem einzigen Unterschied, dass ich einfach die drei Nullen durch REPLICATE() ersetze Funktion:

SELECT RIGHT(REPLICATE('0', 3) + '1234', 7);

Ergebnis:

0001234

Das REPLICATE() Funktion erspart Ihnen das mehrfache Eintippen jeder Null (oder jedes anderen Zeichens).

Bonusmethode:Methode 4 – Verwenden Sie eine Kombination aus REPLACE() und STR()

Diese Methode kommt aus einem völlig anderen Blickwinkel als die vorherigen Methoden:

SELECT REPLACE(STR('1234', 6),' ','0');

Ergebnis:

001234

Hier verwenden wir das REPLACE() Funktion in Verbindung mit STR() Funktion, um eine Zahl in einen String einer bestimmten Länge umzuwandeln und dann alle Leerzeichen in eine Null umzuwandeln.

Eine Sache, auf die Sie achten sollten, ist, dass Sie, wenn Sie die Zahl kürzen (wie wir es in einem vorherigen Beispiel getan haben), am Ende eine Reihe von Sternchen anstelle der (gekürzten) Zahl erhalten:

SELECT REPLACE(STR('1234', 2),' ','0');

Ergebnis:

**