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
Obrigado. Exatamente o que eu procurava.
ResponderExcluirPerfeito. Mais uma técnica aprendida!
ResponderExcluirPerfeito! Muito massa!
ResponderExcluirNossa, o que esta precisando. Bacana.
ResponderExcluirPorque nao usa o Replicate?
ResponderExcluirSELECT REPLICATE('0', 6 - LEN(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?
ResponderExcluirDesta forma é impresso com os decimais corretamente mais não preenche com zeros a esquerda.
ResponderExcluirto_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