Alguns SGBDs possuem um
LPAD()
e RPAD()
função que pode ser usada para preencher números com zeros à esquerda e à direita. SQL Server não tem essa função. Mas isso não nos impede de preencher números com zeros à esquerda/à direita.
Não inteiros
Primeiro, vamos ver os não inteiros:
SELECT
FORMAT(7, '000.00') AS "1",
FORMAT(17, '000.00') AS "2",
FORMAT(73.5, '000.00') AS "3";
Resultado:
+--------+--------+--------+ | 1 | 2 | 3 | |--------+--------+--------| | 007.00 | 017.00 | 073.50 | +--------+--------+--------+
Aqui, usamos o
FORMAT()
função para formatar o número. O primeiro argumento é o número e o segundo argumento é a string de formato. A função gera seu resultado como uma string formatada. No exemplo acima, a string de formato consiste em especificadores de formato numérico personalizados que resultam no número original com zeros adicionados nos locais onde não há dígito no número original. Podemos usar quantos zeros na string de formato precisarmos.
SELECT
FORMAT(7, '00000.0000') AS "1",
FORMAT(17, '00000.0000') AS "2",
FORMAT(73.5, '00000.0000') AS "3";
Resultado:
+------------+------------+------------+ | 1 | 2 | 3 | |------------+------------+------------| | 00007.0000 | 00017.0000 | 00073.5000 | +------------+------------+------------+
Inteiros
Se o número original for um número inteiro, precisamos trabalhar um pouco mais:
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";
Resultado:
+-----------+-----------+-----------+ | 1 | 2 | 3 | |-----------+-----------+-----------| | 000070000 | 000170000 | 000735000 | +-----------+-----------+-----------+
Aqui, usei o
REPLACE()
função para remover o ponto decimal após o número ter sido formatado com ele. Eu usei explicitamente
en-US
como o terceiro argumento (opcional) para garantir que o separador decimal seja um ponto/ponto final, e não outro caractere, como uma vírgula. Algumas localidades usam uma vírgula como separador decimal. Se não especificarmos explicitamente a localidade de dentro da função, a localidade da sessão atual será usada. Especificar explicitamente a localidade de dentro da função garante que a localidade da sessão atual não seja usada e, portanto, não possa interferir em nossa operação de substituição. Azure SQL Edge
O Azure SQL Edge é construído em uma implementação limitada do Mecanismo de Banco de Dados do SQL Server e, portanto, oferece suporte à maioria das funções T-SQL que podemos usar com o SQL Server. No entanto, no momento da escrita, o SQL Edge não suporta o T-SQL
FORMAT()
função. Consulte Como adicionar zeros à esquerda e à direita no Azure SQL Edge para obter um método alternativo (que também funciona no SQL Server).