sexta-feira, 8 de outubro de 2010

Formatação de números com zeros à esquerda no SQL Server

Existem várias situações onde precisamos formatar números com zeros à esquerda para apresentar um uma consulta, para linhar e classificar corretamente um campo.

Considerando a seguinte tabela:

Create Table Teste (Codigo  int, Nome Varchar(40));

Insert into Teste Values(1,'José da Silva');
Insert into Teste Values(2,'Maria da Silva');
Insert into Teste Values(100,'Eusébio Queiroz');
Insert into Teste Values(1000,'Lucas Laranjeira');
Insert into Teste Values(200,'Judith Lima');


Se consultarmos da seguinte forma os dados:

Select Codigo, Cast(Codigo as Varchar(5)) 'CodigoAlfa', Nome
  From Teste
 Order By Cast(Codigo as Varchar(5));


Teremos o seguinte resultado:

Codigo    CodigoAlfa    Nome
1                          1        José da Silva
100                  100        Eusébio Queiroz
1000              1000        Lucas Laranjeira
2                          2        Maria da Silva
200                  200        Judith Lima

Observe que numericamente fica desordenado quando classificamos o número como varchar.
Para resolver esta situação altere a formatação do campo acrescentando os zeros à esquerda do número conforme a consulta:

Select Codigo, RIGHT('0000'+ CONVERT(VARCHAR,Codigo),5) 'CodigoAlfa', Nome
  From Teste
  Order By RIGHT('0000'+ CONVERT(VARCHAR,Codigo),5)

O resultado agora fica desta forma:

Codigo    CodigoAlfa    Nome
1                  00001        José da Silva
2                  00002        Maria da Silva
100              00100        Eusébio Queiroz
200              00200        Judith Lima
1000            01000        Lucas Laranjeira

7 comentários:

  1. Obrigado. Exatamente o que eu procurava.

    ResponderExcluir
  2. Perfeito. Mais uma técnica aprendida!

    ResponderExcluir
  3. Nossa, o que esta precisando. Bacana.

    ResponderExcluir
  4. Porque nao usa o Replicate?

    SELECT REPLICATE('0', 6 - LEN(5))

    ResponderExcluir
  5. Boa tarde. alguém poderia me ajudar e converter um campo valor para que seja apresentado na consulta com zeros a esquerda e com 4 decimais?

    ResponderExcluir
  6. Desta forma é impresso com os decimais corretamente mais não preenche com zeros a esquerda.

    to_char (F.vltitulo, '9G999G990D9999') as vltitulo,
    O resultado fica assim : 99,0000

    desta forma abaixo o resultado fica:
    lpad (F.vltitulo,14,'0' as vltitulo,

    000000000099,00 quando eu preciso que fique 0000000099,0000

    ResponderExcluir