Como dar um order by em um campo que é varchar porem ordenando como se fossem numeros?

Galera como eu vou um order byem um campo varchar porem que so possui numero ex:

id  - int
nome - varchar
dsNumNome - varchar

quero fazer um select assijm:


select * tabela order by dsNumNome

porem se fizer essa query e nao informando que e para ser tratado como numero o sistema nao entendera que 1000 é maior que 11 pois quando comparado em varchar ele entendi que 1000 vem antes de 11, entendera?

Alguem por me ajudar?

Vlw

a) Troque o tipo do campo para numérico.
b) Dependendo do banco é possível criar uma “pseudo-coluna” que é o resultado de um cálculo. Você poderia ordenar o resultado por essa pseudo-coluna.

c) Por favor, evite o uso de “*” no select. Liste apenas os campos que irão ser usados na query.

Olha, a solução é simples… qdo fizer o order by, vc manda ordenar pelo campo CONVERTIDO pra número, e pronto! Tudo fica certinho.

Pra passar a sintaxe exata pra vc, preciso saber qual o BD que vc está usando. Por ex, se for MySQL, vai ficar assim:

Claro que vc tem que ter certeza que o conteúdo de dsNumNome será sempre números (apesar de estar no formato string), senão vai dar erro.

Me passe qual Bd vc está usando que eu te ajudo.

Perfeiro RenataFA sua resposta, apenas complementando um pouco…

Para banco Sql server ou Oracle use NUMERIC.

Galera eu tentei

SELECT * FROM tabela t ORDER BY CAST(dsNumNome  as NUMERIC) 



Deu o seguinte erro:

[code]
ORA-01722: invalid number

SELECT * FROM tabela ORDER BY CAST(t.dsNumNome as NUMERIC)[/code]

galera ate rolou porem se tiver algum com letras cadastrada ele da erro, como faria para caso venha algum com letra ele nao trazer nada…

Crie uma FUNCTION no Oracle que faça isso por você, ou procure uma pronta. Deve haver alguém que já deve ter feito isso (ordenação de strings que é numérica se a string começar por número), portanto é questão de procurar.

Um site interessante para o Oracle: Ask Tom

Exemplo:

Complicated sorting required

Qualquer dúvida, pergunte ao Tom Kyte.

Qual o tamanho do seu campo dsNumNome ?

Bom aqui usando Oracle 10g XE no ubuntu funciona o numeric, bom tenta com integer e usa o regexp_replace para retirar as letras, seria mais ou menos isso.

entao galera…nao ta rolando quando tento usar a query no TOPLINK tipo eu mando a query ele nao ta entendendo o primeiro parentes depois do CAST, sera que o EJBQL nao entendi essa funcao ou é feita de forma diferente?

EJBQL != SQL , portanto não entende essas coisas específicas do Oracle.

iii lasco entao kkkkkk

Sera que tem algo parecido para o EJBQL?

Fiquei com uma duvida: como é o uso de expressões regulares no sql/oracle? deteriora muito a performance?

rodrigo_corinthians, pq vc usou classes POSIX? Funciona bem com diferentes encodings? Tem alguma diferença pras expressões perl-like tipo \w \W \s etc… ?