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

Riempimento sinistro in SQL Server:3 equivalenti LPAD()

Se utilizzi Oracle Database o MySQL, sei abbastanza fortunato da avere il LPAD() e RPAD() funzioni, che consentono di riempire una stringa con un determinato carattere (o più caratteri) alla sua sinistra e/o destra.

Tuttavia, SQL Server (o più precisamente, T-SQL), non include queste funzioni. Quindi, se hai bisogno di un po' di padding sinistro, dovrai improvvisare.

Questo articolo presenta quattro opzioni per riempire un numero con zeri iniziali in SQL Server. Quindi puoi fare cose come girare 7 in 007 . Tre di queste opzioni funzionano sulle stringhe, quindi puoi anche applicare il riempimento ai dati testuali.

Metodo 1:utilizzare la funzione FORMAT()

Se devi applicare zeri iniziali a un numero, questa opzione dovrebbe essere tutto ciò di cui hai bisogno. Questa opzione utilizza il FORMAT() funzione. Questa funzione restituisce il numero come stringa nel nostro formato specificato:

SELECT FORMAT(7, '000');

Risultato:

007

In questo caso, utilizziamo il 0 identificatore di formato per formattare il numero con zeri iniziali, ove applicabile. Questo è solo uno dei tanti identificatori di formato personalizzati. Gli specificatori di formato personalizzati ci consentono di essere molto precisi su come è formattato il nostro numero.

Nota che il FORMAT() la funzione è solo per numeri e valori datetime. Quindi, se devi applicare il riempimento a una stringa reale, continua a leggere.

Metodo 2:utilizzare la funzione RIGHT()

Il secondo metodo utilizza RIGHT() funzione per restituire solo la parte più a destra della stringa, dopo aver aggiunto alcuni zeri iniziali.

Anche se qui sto applicando zeri iniziali a un "numero", in realtà è una rappresentazione di stringa di un numero. Quindi, se devi applicare il riempimento a una stringa anziché a un numero, questo metodo dovrebbe funzionare.

SELECT RIGHT('000' + '1234', 7);

Risultato:

0001234

Il 7 specifica di quanti caratteri deve essere il risultato finale (dopo che sono stati aggiunti gli zeri).

Ridurre la lunghezza

Quindi, se riduciamo quel numero, ridurrà il numero di zeri iniziali:

SELECT RIGHT('000' + '1234', 6);

Risultato:

001234

Aumento della lunghezza

Ma se aumentiamo il numero, dobbiamo assicurarci di aver specificato abbastanza zeri per creare la lunghezza richiesta:

SELECT RIGHT('000000' + '1234', 10);

Risultato:

0000001234

Altrimenti finiamo con questo:

SELECT RIGHT('000' + '1234', 10);

Risultato:

0001234

Abbreviare il numero

Nota inoltre che se non specifichi caratteri sufficienti per la lunghezza della stringa risultante, il numero verrà tagliato e otterrai solo la parte più a destra del numero:

SELECT RIGHT('000' + '1234', 2);

Risultato:

34

Quindi, in questo caso, il numero iniziale è stato troncato più gli zeri iniziali sono stati ignorati.

Questo è uno scenario in cui il risultato è diverso da quello di MySQL e Oracle LPAD() funzione. Quella funzione avrebbe prodotto le prime 2 cifre (non riempite) invece delle ultime 2 cifre. In questo modo:

SELECT LPAD(1234, 2, 0);

Risultato:

12

Se hai bisogno di una soluzione SQL Server che si comporterà come LPAD() in questi casi, prova questo:

SELECT RIGHT(REPLICATE('0', 3) + LEFT('1234', 2), 2);

Risultato:

12

Tuttavia, tieni presente che ottieni lo stesso risultato semplicemente usando il LEFT() funzione da solo:

SELECT LEFT('1234', 2);

Risultato:

12

Inoltre, faccio fatica a pensare a un motivo per cui qualcuno voglia abbreviare il numero (considerando che stanno cercando di riempirlo), ma almeno questo è qualcosa da considerare.

Metodo 3:utilizzare una combinazione di RIGHT() e REPLICATE()

Questo metodo è quasi lo stesso del metodo precedente, con l'unica differenza che sostituisco semplicemente i tre zeri con REPLICATE() funzione:

SELECT RIGHT(REPLICATE('0', 3) + '1234', 7);

Risultato:

0001234

Il REPLICATE() la funzione ti evita di dover digitare ogni zero (o altro carattere) più volte.

Metodo Bonus:Metodo 4 – Usa una Combinazione di REPLACE() e STR()

Questo metodo deriva da un'angolazione completamente diversa rispetto ai metodi precedenti:

SELECT REPLACE(STR('1234', 6),' ','0');

Risultato:

001234

Qui usiamo il REPLACE() funzione insieme a STR() funzione per convertire un numero in una stringa di una lunghezza specifica, quindi convertire qualsiasi spazio in uno zero.

Una cosa a cui prestare attenzione è che, se abbrevia il numero (come abbiamo fatto in un esempio precedente), ti ritroverai con un mucchio di asterischi invece del numero (abbreviato):

SELECT REPLACE(STR('1234', 2),' ','0');

Risultato:

**