Se você usa Oracle Database ou MySQL, você tem a sorte de ter o
LPAD()
e RPAD()
funções, que permitem preencher uma string com um determinado caractere (ou caracteres) à esquerda e/ou à direita. No entanto, o SQL Server (ou mais precisamente, o T-SQL), não inclui essas funções. Então, se você precisar de algum preenchimento esquerdo, precisará improvisar.
Este artigo apresenta quatro opções para preencher um número com zeros à esquerda no SQL Server. Então você pode fazer coisas como virar
7
em 007
. Três dessas opções funcionam em strings, então você também pode aplicar preenchimento a dados textuais. Método 1 – Use a função FORMAT()
Se você precisar aplicar zeros à esquerda a um número, essa opção deve ser tudo o que você precisa. Esta opção usa o
FORMAT()
função. Esta função retorna o número como uma string em nosso formato especificado:SELECT FORMAT(7, '000');
Resultado:
007
Neste caso, usamos o
0
especificador de formato para formatar o número com zeros à esquerda, quando aplicável. Este é apenas um dos muitos especificadores de formato personalizado. Os especificadores de formato personalizados nos permitem ser muito precisos sobre como nosso número é formatado. Observe que o
FORMAT()
função é apenas para números e valores de data e hora. Portanto, se você precisar aplicar preenchimento a uma string real, continue lendo. Método 2 – Use a função RIGHT()
O segundo método usa o
RIGHT()
função para retornar apenas a parte mais à direita da string, depois de adicionar alguns zeros à esquerda. Embora eu esteja aplicando zeros à esquerda para um “número” aqui, na verdade é uma representação de string de um número. Portanto, se você precisar aplicar preenchimento a uma string em vez de um número, esse método deve funcionar.
SELECT RIGHT('000' + '1234', 7);
Resultado:
0001234
O
7
especifica quantos caracteres o resultado final deve ter (após os zeros terem sido adicionados). Reduzindo o comprimento
Então, se reduzirmos esse número, ele reduzirá o número de zeros à esquerda:
SELECT RIGHT('000' + '1234', 6);
Resultado:
001234
Aumentando o comprimento
Mas se aumentarmos o número, precisamos ter certeza de que especificamos zeros suficientes para compor o comprimento necessário:
SELECT RIGHT('000000' + '1234', 10);
Resultado:
0000001234
Caso contrário, acabamos com isso:
SELECT RIGHT('000' + '1234', 10);
Resultado:
0001234
Encurtando o número
Observe também que, se você não especificar caracteres suficientes para o comprimento da string resultante, o número será cortado e você obterá apenas a parte mais à direita do número:
SELECT RIGHT('000' + '1234', 2);
Resultado:
34
Portanto, neste caso, o número inicial foi truncado e os zeros à esquerda foram ignorados.
Este é um cenário em que o resultado difere daquele do MySQL e do
LPAD()
do Oracle função. Essa função teria produzido os primeiros 2 dígitos (sem preenchimento) em vez dos últimos 2 dígitos. Assim:SELECT LPAD(1234, 2, 0);
Resultado:
12
Se você precisar de uma solução SQL Server que se comporte como
LPAD()
nesses casos, tente isto:SELECT RIGHT(REPLICATE('0', 3) + LEFT('1234', 2), 2);
Resultado:
12
Embora, tenha em mente que você obtém o mesmo resultado simplesmente usando o
LEFT()
função por si só:SELECT LEFT('1234', 2);
Resultado:
12
Além disso, estou lutando para pensar em uma razão pela qual alguém queira reduzir o número (considerando que está tentando preenchê-lo), mas pelo menos isso é algo a ser considerado.
Método 3 – Use uma combinação de RIGHT() e REPLICATE()
Este método é quase o mesmo que o método anterior, com a única diferença de que eu simplesmente substituo os três zeros pelo
REPLICATE()
função:SELECT RIGHT(REPLICATE('0', 3) + '1234', 7);
Resultado:
0001234
O
REPLICATE()
A função evita que você precise digitar cada zero (ou outro caractere) várias vezes. Método de bônus:Método 4 – Use uma combinação de REPLACE() e STR()
Este método vem de um ângulo completamente diferente dos métodos anteriores:
SELECT REPLACE(STR('1234', 6),' ','0');
Resultado:
001234
Aqui usamos o
REPLACE()
função em conjunto com o STR()
função para converter um número em uma string de um comprimento específico e, em seguida, converter quaisquer caracteres de espaço em zero. Uma coisa a ter cuidado é que, se você encurtar o número (como fizemos em um exemplo anterior), você acabará com um monte de asteriscos em vez do número (encurtado):
SELECT REPLACE(STR('1234', 2),' ','0');
Resultado:
**