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

Führende und nachgestellte Nullen in SQL Server hinzufügen

Einige DBMSs haben ein LPAD() und RPAD() Funktion, mit der Zahlen mit führenden und nachgestellten Nullen aufgefüllt werden können.

SQL Server hat keine solche Funktion. Aber das hindert uns nicht daran, Zahlen mit führenden/nachgestellten Nullen aufzufüllen.

Nicht-Ganzzahlen

Schauen wir uns zuerst Nicht-Ganzzahlen an:

SELECT 
    FORMAT(7, '000.00') AS "1",
    FORMAT(17, '000.00') AS "2",
    FORMAT(73.5, '000.00') AS "3";

Ergebnis:

+--------+--------+--------+
| 1      | 2      | 3      |
|--------+--------+--------|
| 007.00 | 017.00 | 073.50 |
+--------+--------+--------+

Hier verwenden wir das FORMAT() Funktion zum Formatieren der Nummer. Das erste Argument ist die Zahl und das zweite Argument ist die Formatzeichenfolge. Die Funktion gibt ihr Ergebnis als formatierten String aus.

Im obigen Beispiel besteht die Formatzeichenfolge aus benutzerdefinierten numerischen Formatbezeichnern, die dazu führen, dass der ursprünglichen Zahl Nullen an den Stellen hinzugefügt werden, an denen keine Ziffer in der ursprünglichen Zahl vorhanden ist. Wir können so viele Nullen im Formatstring verwenden, wie wir brauchen.

SELECT 
    FORMAT(7, '00000.0000') AS "1",
    FORMAT(17, '00000.0000') AS "2",
    FORMAT(73.5, '00000.0000') AS "3";

Ergebnis:

+------------+------------+------------+
| 1          | 2          | 3          |
|------------+------------+------------|
| 00007.0000 | 00017.0000 | 00073.5000 |
+------------+------------+------------+

Ganzzahlen

Wenn die ursprüngliche Zahl eine Ganzzahl ist, müssen wir etwas mehr Arbeit leisten:

SELECT 
    REPLACE(FORMAT(7, '00000.0000', 'en-US'), '.', '') AS "1",
    REPLACE(FORMAT(17, '00000.0000', 'en-US'), '.', '') AS "2",
    REPLACE(FORMAT(73.5, '00000.0000', 'en-US'), '.', '') AS "3";

Ergebnis:

+-----------+-----------+-----------+
| 1         | 2         | 3         |
|-----------+-----------+-----------|
| 000070000 | 000170000 | 000735000 |
+-----------+-----------+-----------+

Hier habe ich den REPLACE() verwendet Funktion zum Entfernen des Dezimalpunkts, nachdem die Zahl damit formatiert wurde.

Ich habe ausdrücklich en-US verwendet als (optionales) drittes Argument, um sicherzustellen, dass das Dezimaltrennzeichen ein Punkt/Punkt ist und kein anderes Zeichen wie ein Komma. Einige Gebietsschemas verwenden ein Komma als Dezimaltrennzeichen. Wenn wir das Gebietsschema nicht explizit innerhalb der Funktion angeben, wird das Gebietsschema der aktuellen Sitzung verwendet. Die explizite Angabe des Gebietsschemas innerhalb der Funktion stellt sicher, dass das Gebietsschema der aktuellen Sitzung nicht verwendet wird und daher unseren Ersetzungsvorgang nicht beeinträchtigen kann.

Azure SQL Edge

Azure SQL Edge basiert auf einer eingeschränkten Implementierung der SQL Server-Datenbank-Engine und unterstützt daher die meisten T-SQL-Funktionen, die wir mit SQL Server verwenden können. Zum Zeitpunkt des Schreibens unterstützt SQL Edge jedoch nicht das T-SQL-FORMAT() Funktion.

Eine alternative Methode (die auch in SQL Server funktioniert) finden Sie unter Hinzufügen führender und nachgestellter Nullen in Azure SQL Edge.