Como dar um order by em um campo que é varchar porem ordenando como se fossem numeros?
12 respostas
T
TeiTei
Galera como eu vou um order byem um campo varchar porem que so possui numero ex:
id-intnome-varchardsNumNome-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?
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.
R
RenataFA
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.
R
rodrigo_corinthians
Perfeiro RenataFA sua resposta, apenas complementando um pouco…
Para banco Sql server ou Oracle use NUMERIC.
T
TeiTei
Galera eu tentei
SELECT * FROM tabela t ORDER BY CAST(dsNumNome as NUMERIC)
Deu o seguinte erro:
ORA-01722: invalid number
SELECT * FROM tabela ORDER BY CAST(t.dsNumNome as NUMERIC)
T
TeiTei
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…
E
entanglement
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.
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.
T
TeiTei
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?
E
entanglement
EJBQL != SQL , portanto não entende essas coisas específicas do Oracle.
T
TeiTei
iii lasco entao kkkkkk
Sera que tem algo parecido para o EJBQL?
P
peczenyj
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… ?