Nogle DBMS'er har en LPAD()
og RPAD()
funktion, som kan bruges til at udfylde tal med indledende og efterfølgende nuller.
SQL Server har ikke sådan en funktion. Men det forhindrer os ikke i at kunne udfylde tal med indledende/efterstillede nuller.
Ikke-heltal
Lad os først se på ikke-heltal:
SELECT
FORMAT(7, '000.00') AS "1",
FORMAT(17, '000.00') AS "2",
FORMAT(73.5, '000.00') AS "3";
Resultat:
+--------+--------+--------+| 1 | 2 | 3 ||--------+--------+--------|| 007.00 | 017.00 | 073.50 |+--------+--------+--------+
Her bruger vi FORMAT()
funktion til at formatere nummeret. Det første argument er tallet, og det andet argument er formatstrengen. Funktionen udsender sit resultat som en formateret streng.
I ovenstående eksempel består formatstrengen af brugerdefinerede numeriske formatspecifikationer, der resulterer i, at det oprindelige tal har tilføjet nuller på de steder, hvor der ikke er noget ciffer i det oprindelige tal. Vi kan bruge så mange nuller i formatstrengen, som vi har brug for.
SELECT
FORMAT(7, '00000.0000') AS "1",
FORMAT(17, '00000.0000') AS "2",
FORMAT(73.5, '00000.0000') AS "3";
Resultat:
+------------+-------------+------------+| 1 | 2 | 3 ||--------------------------------------|| 00007.0000 | 00017.0000 | 00073.5000 |+------------+---------------+
Heltal
Hvis det oprindelige tal er et heltal, så skal vi gøre lidt mere arbejde:
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";
Resultat:
+-------+---------------+| 1 | 2 | 3 ||-----------+-----------+--------|| 000070000 | 000170000 | 000735000 |+-----------+------------------+
Her brugte jeg REPLACE()
funktion til at fjerne decimaltegnet efter tallet er blevet formateret med det.
Jeg brugte udtrykkeligt en-US
som det (valgfrie) tredje argument for at sikre, at decimaladskilleren er et punktum/punktum og ikke et andet tegn, som et komma. Nogle lokaliteter bruger et komma som decimalseparator. Hvis vi ikke udtrykkeligt angiver lokaliteten inde fra funktionen, bruges lokaliteten for den aktuelle session. Eksplicit angivelse af lokaliteten inde fra funktionen sikrer, at den aktuelle sessions lokalitet ikke bruges og derfor ikke er i stand til at forstyrre vores erstatningsoperation.
Azure SQL Edge
Azure SQL Edge er bygget på en begrænset implementering af SQL Server Database Engine, og derfor understøtter den de fleste af de T-SQL funktioner, som vi kan bruge med SQL Server. Men i skrivende stund understøtter SQL Edge ikke T-SQL FORMAT()
funktion.
Se Sådan tilføjer du førende og efterfølgende nuller i Azure SQL Edge for en alternativ metode (som også virker i SQL Server).