sql >> Database >  >> RDS >> Sqlserver

Voorloop- en volgnullen toevoegen in SQL Server

Sommige DBMS'en hebben een LPAD() en RPAD() functie die kan worden gebruikt om nummers met voorloop- en volgnullen op te vullen.

SQL Server heeft zo'n functie niet. Maar dat weerhoudt ons er niet van om getallen met voor-/achtervolging nullen op te vullen.

Niet-gehele getallen

Laten we eerst eens kijken naar niet-gehele getallen:

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

Resultaat:

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

Hier gebruiken we de FORMAT() functie om het getal op te maken. Het eerste argument is het getal en het tweede argument is de opmaakreeks. De functie voert het resultaat uit als een opgemaakte string.

In het bovenstaande voorbeeld bestaat de notatiereeks uit aangepaste numerieke notatiespecificaties die ertoe leiden dat aan het oorspronkelijke getal nullen worden toegevoegd op de plaatsen waar er geen cijfer in het oorspronkelijke getal staat. We kunnen zoveel nullen in de opmaakreeks gebruiken als we nodig hebben.

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

Resultaat:

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

Gehele getallen

Als het oorspronkelijke getal een geheel getal is, moeten we wat meer werk doen:

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";

Resultaat:

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

Hier gebruikte ik de REPLACE() functie om de komma te verwijderen nadat het getal ermee is opgemaakt.

Ik gebruikte expliciet en-US als het (optionele) derde argument om ervoor te zorgen dat het decimaalteken een punt/punt is, en niet een ander teken, zoals een komma. Sommige landinstellingen gebruiken een komma als decimaalteken. Als we de landinstelling niet expliciet specificeren vanuit de functie, wordt de landinstelling van de huidige sessie gebruikt. Het expliciet specificeren van de landinstelling vanuit de functie zorgt ervoor dat de landinstelling van de huidige sessie niet wordt gebruikt en kan daarom onze vervangingsbewerking niet verstoren.

Azure SQL Edge

Azure SQL Edge is gebouwd op een beperkte implementatie van de SQL Server Database Engine en ondersteunt daarom de meeste T-SQL-functies die we kunnen gebruiken met SQL Server. Op het moment van schrijven ondersteunt SQL Edge echter niet de T-SQL FORMAT() functie.

Zie Voorloop- en volgnullen toevoegen in Azure SQL Edge voor een alternatieve methode (die ook werkt in SQL Server).


  1. Ontmoetingen op de werkplek:ruimte terugwinnen uit een te grote database

  2. MySQL migreren van Amazon EC2 naar uw on-premises datacenter zonder downtime

  3. ClusterControl CMON HA voor hoge beschikbaarheid van gedistribueerde databases - deel twee (GUI Access Setup)

  4. Splits woorden met een hoofdletter in sql