ordenar por texto como numero via sql
06/04/2005
0
Uso Delphi 6 e paleta Interbase com Firebird 1.5
Como posso fazer para ordenar texto como se fosse numeros.
me sql é:
Select * from Orcamento where CodTipoDocumento = ´´´+´9´+´´´
order by Numero
onde esse numero é a nota fiscal ou o número do orçamento, só que o campo é utilizado em texto, por poder utilizar barras e traços. Mas quando o codtipodocumento é 9 ele é numerico e deveria ser sequencial, mas eu nao consigo ordenar corretamente, pois ao fazer essa ordenação ele erra sendo que por exemplo 34 vem antes do 104 na ordenação por texto.
como posso fazer com que o numero seja ordenado transformando em numeros e nao em texto.
Agradeço antecipadamente qualquer ajuda.
Salupe
Posts
06/04/2005
Rjun
06/04/2005
Salupe
e tambem sem os parenteses mas nao funcionou, nao sei se nao tem essa opção ou eu errei a sintaxe.
Como o cast é utilizado no sql server, ou algum tem alguma outra idéia de como fazer essa ordenação.
Agradeço antecipadamente qualquer ajuda.
06/04/2005
Rjun
Select *
From
Orcamento
where
CodTipoDocumento = ´9´
Order By
Cast(Numero as numeric)
06/04/2005
Salupe
a variável tem tamanho para 10 espaços e o numero vai ser cadastrado com 30, 50, 65 e por aí vai.
o comando aparentemente vai funcionar só que tenho que retirar os espaços em branco do campo.
Tentei utilizar
´´´+Trim(numero)+´´´
´´´+IntToStr(numero)+´´´
mas nenhum funcionou
Agradeço antecipadamente qualquer ajuda.
06/04/2005
Rjun
07/04/2005
Raserafim
selec cast(CAMPO as numeric) from TABELA order by 1
o detalhe está na cláusula order by, vc tem q passar o índice da coluna que vc quer ordenar. a diferença deste índice para o delphi é que aqui o índice da 1º coluna é 1.
07/04/2005
Salupe
Utilizo Char com tamanho 10
Raserafin
Sua indicação nao abre a query por ser diferente o tipo do campo
Agradeço as ajudas mas até agora nao consegui
Alguem tem mais alguma idéia
Agradeço antecipadamente qualquer nova ajuda
07/04/2005
Gandalf.nho
07/04/2005
Salupe
Se eu simplesmente trocar o campo para varchar o firebird 1.5 vai aceitar a troca simples de tipo? Fazendo a troca a ordenação será feita corretamente?
Agradeço antecipadamente qualquer ajuda.
07/04/2005
Gandalf.nho
Não custa experimentar, outro problema pode ser o fato, de como vc disse, do campo conter símbolos não numéricos. De qualquer maneira, como o conteúdo do campo geralmente é menor do que o tamanho dele, é recomendado usar VARCHAR e não CHAR
07/04/2005
Salupe
O negócio teria que ser mesmo conseguir retirar os espaços em branco pelo sql para poder fazer a conversão e ordenação.
Agradeço antecipadamente qualquer ajuda.
07/04/2005
Gandalf.nho
07/04/2005
Raserafim
selec cast(CAMPO as numeric), CAMPO from TABELA order by 1
assim vc ordena no código pelo campo cast mas no delphi utiliza o outro campo (duplicado) CAMPO.
e em relação ao Char e Varchar, mesmo convertendo para varchar vc realmente vai continuar com os espaçoes em branco, pois no Char ele sempre completa os caracteres restantes com espaçoes em branco (que tb é caracter) e consequentemente o varchar vai assumir estes caracteres.
se vc testar apenas em um registro cadastrar novamente, verá q vai ficar sem os espaços.
16/04/2023
Joatan Lima
[code:1:a6eca540bd]selec cast(CAMPO as numeric), CAMPO
from TABELA
order by 1
[/code:1:a6eca540bd]
assim vc ordena no código pelo campo cast mas no delphi utiliza o outro campo (duplicado) CAMPO.
e em relação ao Char e Varchar, mesmo convertendo para varchar vc realmente vai continuar com os espaçoes em branco, pois no Char ele sempre completa os caracteres restantes com espaçoes em branco (que tb é caracter) e consequentemente o varchar vai assumir estes caracteres.
se vc testar apenas em um registro cadastrar novamente, verá q vai ficar sem os espaços.
Se o CAMPO for em branco (null) dará erro, como resolver nesse caso no select acima?
Clique aqui para fazer login e interagir na Comunidade :)