sql >> Databasteknik >  >> RDS >> Sqlserver

Lägg till ledande och efterföljande nollor i SQL Server

Vissa DBMS har en LPAD() och RPAD() funktion som kan användas för att fylla ut nummer med inledande och efterföljande nollor.

SQL Server har inte en sådan funktion. Men det hindrar oss inte från att kunna fylla på siffror med inledande/efterföljande nollor.

Icke-heltal

Låt oss först titta på icke-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 |
+--------+--------+--------+

Här använder vi FORMAT() funktion för att formatera numret. Det första argumentet är numret och det andra argumentet är formatsträngen. Funktionen matar ut sitt resultat som en formaterad sträng.

I exemplet ovan består formatsträngen av anpassade numeriska formatspecifikationer som resulterar i att det ursprungliga numret har lagts till nollor på de platser där det inte finns någon siffra i det ursprungliga numret. Vi kan använda så många nollor i formatsträngen som vi behöver.

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

Om det ursprungliga talet är ett heltal måste vi göra lite mer arbete:

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 |
+-----------+-----------+-----------+

Här använde jag REPLACE() funktion för att ta bort decimaltecknet efter att talet har formaterats med det.

Jag använde uttryckligen en-US som det (valfria) tredje argumentet för att säkerställa att decimalavgränsaren är en punkt/punkt och inte ett annat tecken, som ett kommatecken. Vissa språk använder ett kommatecken som decimalavgränsare. Om vi ​​inte uttryckligen anger lokalen inifrån funktionen, används lokaliteten för den aktuella sessionen. Att explicit specificera språket från funktionen säkerställer att den aktuella sessionens språk inte används och därför inte kan störa vår ersättningsoperation.

Azure SQL Edge

Azure SQL Edge är byggd på en begränsad implementering av SQL Server Database Engine, och därför stöder den de flesta T-SQL-funktioner som vi kan använda med SQL Server. Men i skrivande stund har SQL Edge inte stöd för T-SQL FORMAT() funktion.

Se Hur man lägger till ledande och efterföljande nollor i Azure SQL Edge för en alternativ metod (som också fungerar i SQL Server).


  1. CTE för att få alla barn (ättlingar) till en förälder

  2. 8 Nya Oracle-kompatibilitetsfunktioner i EnterpriseDB PPAS 9.2 Beta

  3. Hur castar man json array till text array?

  4. Filtrera data med JDBC RowSet