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