Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Aggiungi zeri iniziali e finali in SQL Server

Alcuni DBMS hanno un LPAD() e RPAD() funzione che può essere utilizzata per riempire i numeri con zeri iniziali e finali.

SQL Server non ha tale funzione. Ma questo non ci impedisce di essere in grado di inserire numeri con zeri iniziali/finali.

Non interi

Per prima cosa, diamo un'occhiata ai non interi:

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

Risultato:

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

Qui utilizziamo il FORMAT() funzione per formattare il numero. Il primo argomento è il numero e il secondo argomento è la stringa di formato. La funzione restituisce il risultato come una stringa formattata.

Nell'esempio precedente, la stringa di formato è costituita da identificatori di formato numerico personalizzati che fanno sì che il numero originale abbia degli zeri nei punti in cui non ci sono cifre nel numero originale. Possiamo usare tutti gli zeri di cui abbiamo bisogno nella stringa di formato.

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

Risultato:

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

Interi

Se il numero originale è un intero, allora dobbiamo fare un po' più di lavoro:

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

Risultato:

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

Qui, ho usato il REPLACE() funzione per rimuovere il punto decimale dopo che il numero è stato formattato con esso.

Ho usato esplicitamente en-US come terzo argomento (facoltativo) per garantire che il separatore decimale sia un punto/punto e non un altro carattere, come una virgola. Alcune impostazioni locali utilizzano una virgola come separatore decimale. Se non specifichiamo esplicitamente la locale dall'interno della funzione, viene utilizzata la locale della sessione corrente. La specificazione esplicita della locale dall'interno della funzione garantisce che la locale della sessione corrente non venga utilizzata e, pertanto, non sia in grado di interferire con la nostra operazione di sostituzione.

Azure SQL Edge

Azure SQL Edge è basato su un'implementazione limitata del Motore di database di SQL ServerSQL Server Database Engine e pertanto supporta la maggior parte delle funzioni T-SQL che possiamo usare con SQL ServerSQL Server. Tuttavia, al momento della scrittura, SQL Edge non supporta T-SQL FORMAT() funzione.

Vedere Come aggiungere zeri iniziali e finali in Azure SQL Edge per un metodo alternativo (che funziona anche in SQL Server).