ordenar por texto como numero via sql

06/04/2005

0

Oi

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

Salupe

Responder

Posts

06/04/2005

Rjun

Não tem alguma função que converta o texto em numero, tipo Cast do SQL Server ?


Responder

06/04/2005

Salupe

tentei assim: order cast(numeros)
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.


Responder

06/04/2005

Rjun

No SQL Server eu usaria :

Select *
From
Orcamento
where
CodTipoDocumento = ´9´
Order By
Cast(Numero as numeric)


Responder

06/04/2005

Salupe

desculpe esqueci de comentar, nesse comando tem como retirar os espaços em branco da variável numero.

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.


Responder

06/04/2005

Rjun

No SQL Server tem as funções RTRIM e LTRIM. Agora no Firebird não sei.


Responder

06/04/2005

Gandalf.nho

Vc usa CHAR ou VARCHAR nesse campo?


Responder

07/04/2005

Raserafim

salupe, para ordenar basta converter a coluna para numeric, por exemplo, utilizando a função cast:

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.


Responder

07/04/2005

Salupe

Gandalf.nho

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


Responder

07/04/2005

Gandalf.nho

Vc estava falando em tirar os espaços em branco, isso ocorre justamente pq o campo é CHAR e não VARCHAR


Responder

07/04/2005

Salupe

Entao eu nao vou poder fazer esta ordenação por que o campo é char?

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.


Responder

07/04/2005

Gandalf.nho

Entao eu nao vou poder fazer esta ordenação por que o campo é char? 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.


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


Responder

07/04/2005

Salupe

consegui fazer a mudança para varchar sem perder os dados que já estavam contidos, mas para o que eu preciso nao adiantou em nada e ele continua com os espaços, sem dizer que tive que atualizar todos os campos que estavam ligados à tabela (manualmente).

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.


Responder

07/04/2005

Gandalf.nho

Não tenho certeza, mas acho que a biblioteca UDF que acompanha o IB/FB tem uma função TRIM, experimente usá-la.


Responder

07/04/2005

Raserafim

salupe, caso o código que eu sugeri tenha ordenado corretamente e apenas no delphi não tenha funcionado por causa do erro do campo. vc pode fazer o seguinte:
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.


Responder

16/04/2023

Joatan Lima

salupe, caso o código que eu sugeri tenha ordenado corretamente e apenas no delphi não tenha funcionado por causa do erro do campo. vc pode fazer o seguinte:
[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?
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar