Pesquisar este blog

terça-feira, 23 de novembro de 2010

O truque do zero à esquerda

Olá caros sqlnautas. Este artigo é relacionado à T-SQL em Microsoft SQL Server. Este artigo é compatível com qualquer versão a partir do SQL Server 2000.

Existem algumas situações, em que precisamos concatenar zeros à esquerda de um número para transformar em string, geralmente necessário quando estamos fazendo layouts de arquivos de texto para exportação entre sistemas.

Exemplo:

O número 25 deve retornar como 00025, assim como o número 325 deve retornar 00325 (mesmo número de algarismos).

Mas como resolver isso facilmente? Muito simples!

 

Code Snippet
  1. declare @numero int
  2. declare @texto varchar(100)
  3.  
  4. select @numero = 23
  5.  
  6. select @texto = right('00000' + rtrim(@numero),5)
  7.  
  8. select @texto as [NTexto]


O resultado, não pode ser diferente:

 

image

 

Veja no exemplo abaixo, se o mês fosse janeiro ou outubro, ambos ficariam corretos com a concatenação do zero à esquerda:

image
 

A lógica é muito simples.

RTRIM ~> utilizado para remover espaços a direita de uma string, porém quando usado em um valor inteiro, o transforma em string.

RIGHT(str, qtd) ~> Pega os caracteres à direita da string informada conforme quantidade especificada.

“rtrim(@numero)” ~> transforma o valor da variavel @numero (inteiro) em string;

”right(‘00000’ + rtrim(@numero),5) ~> concateno ao número convertido em string o número fixo de zeros a esquerda que desejo (neste caso, estou utilizando 5 zeros), e depois corto à direita 5 digitos.

O número 25 ao concatenar os zeros fica “0000025” e com o right(str, 5), deixa somente 00025.

Esta técnica garante que independente do número, ele sempre irá preencher a quantidade correta de zeros a esquerda. Lembre-se de dimensionar corretamente a quantidade de zeros, pois se o número for maior que o limite, não ocorrerá erro, porém o número retornado será truncado. (exemplo: se está trabalhando com 5 zeros, e utilizar esta técnica no número ‘123456’, retornará à string somente ‘23456’)

That’s all folks!

4 comentários:

  1. PORQUE NAO USA O REPLICATE?

    ResponderExcluir
    Respostas
    1. Provavelmente não tenha lido em detalhes, mas a dica não é só para colocar zeros à esquerda. Mas para colocar zeros em uma quantidade certa.

      Digamos que você tenha um layout de arquivo para gerar, onde os valores numéricos devem ser apresentados em 10 caracteres, sempre preenchidos de zero a esquerda (ex: o número 25 ficaria representado como 0000000025).

      Se o teu número for 25, ou 225, o número de zeros à esquerda muda, concorda?

      Uma solução para o mesmo usando o replicate seria:

      select replicate('0', 10 - len(rtrim(25)) ) + rtrim(25)
      select replicate('0', 10 - len(rtrim(225)) ) + rtrim(225)
      select replicate('0', 10 - len(rtrim(3225)) ) + rtrim(3225)


      --------------------
      0000000025

      (1 linha(s) afetadas)


      -------------------
      0000000225

      (1 linha(s) afetadas)


      ------------------
      0000003225

      (1 linha(s) afetadas)


      Veja que nos três casos, a quantidade de dígitos do número é a mesma (10 números), porém a quantidade de zeros varia de acordo com o numero informado. Veja que em nenhum dos casos, usei mais de uma linha de código para chegar ao objetivo, não usei IF nem nada precido...

      essa é a dica...

      abraço!

      Excluir
  2. Boa, funcionou perfeitamente !

    ResponderExcluir