Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

2 maneiras de formatar um número com zeros à esquerda no Oracle


Ao usar o Oracle Database para formatar um número para ter zeros à esquerda, precisamos convertê-lo em uma string e formatá-lo adequadamente.

Você pode usar o TO_CHAR(number) função para formatar números com zeros à esquerda.

E talvez um fato menos conhecido, é que você também pode usar o LPAD() função para preencher um número com zeros à esquerda.

O TO_CHAR() Função


Ao usar o TO_CHAR(number) função, use o 0 elemento de formato para incluir zeros à esquerda e/ou à direita.

Exemplo:
SELECT TO_CHAR(7, 'fm000')
FROM DUAL;

Resultado:
007

Aqui está quando comparado ao 9 elemento de formato:
SELECT 
    TO_CHAR(7, 'fm999') AS "9",
    TO_CHAR(7, 'fm000') AS "0"
FROM DUAL;

Resultado:
   9      0 
____ ______ 
7    007   

O número de zeros à esquerda é determinado pelo número de 0 elementos de formato e o número de dígitos no número:
SELECT 
    TO_CHAR(77, 'fm0') AS "r1",
    TO_CHAR(77, 'fm00000') AS "r2",
    TO_CHAR(777, 'fm00000') AS "r3",
    TO_CHAR(7777, 'fm00000') AS "r4",
    TO_CHAR(77777, 'fm00000') AS "r5"
FROM DUAL;

Resultado:
   r1       r2       r3       r4       r5 
_____ ________ ________ ________ ________ 
##    00077    00777    07777    77777   

O fm O modificador de formato suprime qualquer preenchimento à esquerda e/ou à direita que possa ser incluído no resultado. Por exemplo, quando o número é negativo, um sinal de menos é prefixado. Mas quando o número é positivo, nenhum sinal é incluído e um espaço aparece onde o sinal de mais deveria estar.

Aqui está um exemplo para demonstrar isso:
SELECT 
    TO_CHAR(-7, '000') AS "Minus Sign",
    TO_CHAR(7, '000') AS "Padded",
    TO_CHAR(7, 'fm000') AS "Not Padded"
FROM DUAL;

Resultado:
   Minus Sign    Padded    Not Padded 
_____________ _________ _____________ 
-007           007      007          

O LPAD() Função


Alternativamente, podemos usar o LPAD() função para formatar números com zeros à esquerda.

Exemplo:
SELECT LPAD(7, 3, '0')
FROM DUAL;

Resultado:
007

Outro exemplo:
SELECT 
    LPAD(77, 1, '0') AS "r1",
    LPAD(77, 5, '0') AS "r2",
    LPAD(777, 5, '0') AS "r3",
    LPAD(7777, 5, '0') AS "r4",
    LPAD(77777, 5, '0') AS "r5"
FROM DUAL;

Resultado:
   r1       r2       r3       r4       r5 
_____ ________ ________ ________ ________ 
7     00077    00777    07777    77777   

Um dos benefícios que LPAD() tem sobre o método anterior é que podemos prefixar o resultado com outros caracteres – não precisa ser um zero à esquerda.
SELECT 
    LPAD(77, 1, '.') AS "r1",
    LPAD(77, 5, '.') AS "r2",
    LPAD(777, 5, '.') AS "r3",
    LPAD(7777, 5, '.') AS "r4",
    LPAD(77777, 5, '.') AS "r5"
FROM DUAL;

Resultado:
   r1       r2       r3       r4       r5 
_____ ________ ________ ________ ________ 
7     ...77    ..777    .7777    77777