Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Adicionar zeros à esquerda e à direita no SQL Server


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).