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

Preenchimento esquerdo no SQL Server – 3 equivalentes LPAD()


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:
**