Como dar um order by em um campo que é varchar porem ordenando como se fossem numeros?
12 respostas
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.
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.
rodrigo_corinthians
Perfeiro RenataFA sua resposta, apenas complementando um pouco…
Para banco Sql server ou Oracle use NUMERIC.
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)
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.
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.
TeiTei
iii lasco entao kkkkkk
Sera que tem algo parecido para o EJBQL?
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… ?