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?
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.
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.
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?
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… ?