Alguem sabe como consigo armazenar uma tabela no oracle com valores ordenados. Por exemplo, sejam os dados: ano 1, ano 2, ano 10, ano 5
Deverá ser armazenado no banco: ano 1, ano 2, ano 5, ano 10.
Quando um select for feito devera retorna as tuplas já ordenadas. Verifique que deve considerar strings com letra e numero.
Hoje já uso o order By. O problema é que ele parece considerar ordenação ASCII. E eu preciso que o select já me devolva a ordenação considerando texto e número.
Desde jeito: ano 1 , ano 2, ano 10 e não ano 1, ano 10, ano 2
Tem como setar o ORDER BY para ele ordenar considerando número e texto?
[quote=aloizio]Hoje já uso o order By. O problema é que ele parece considerar ordenação ASCII. E eu preciso que o select já me devolva a ordenação considerando texto e número.
Desde jeito: ano 1 , ano 2, ano 10 e não ano 1, ano 10, ano 2
Tem como setar o ORDER BY para ele ordenar considerando número e texto?[/quote]
cara, vc ta armazenando a String “ano” no banco? aí ferra tudo… bom, tenta usar uma expressão para fazer um substring, pegando apenas a parte numerica da coluna, tranformar em um number e fazer o order by.
Mas a performace disso não sera das melhores. Se possível, tire esse “ano” daí.
Além disso que o microfilo falou, se for mesmo pra armazenar datas, PELAMORDESUAMÃE, use o tipo datetime. Ou se é mesmo pra armazenar somente o ano, use um campo do tipo integer mesmo. Já vi um sistema INTEIRO feito armazenando datas em um VARCHAR2(!!!) no formato 20011231 e acredite, isso DÓI no coração. Como o Lipe diria, um típico bambu desfiado.
Acho que vocês estão enganados. Na verdade eu tenho um objeto java em que um de seus atributos é “NOME”, este atributo é preenchido por um usuário na interface gráfica. Portanto o usuario pode dar o nome que quiser. Por exemplo: ab2c, ab45d, ano 1, ano 2 , ano 17.
Este objeto é armazenado no banco de dados Oracle. Existe uma outra interface em que todos os objetos são listados e ordenados pelo “NOME”.
Sendo assim preciso que o Oracle me retorne a ordenação considerando texto e número.
O peczenyj sugeriu usar “regexp_replace”, vou ver o que acontece.
E tu ja penso que isso nao tem como o banco fazer? O teu campo é uma String ou no banco um VARCHAR2 e pro banco independente do que tem la dentro tudo é String e é assim que ele ordena por String.
O negocio é tua aplicacao tratar isso nao tem jeito.
Outra coisa, gravar ‘ano02’ quando o usuario inserir ‘ano2’ se chama ‘aplicar uma máscara aos dados inseridos’. um simples javascript ou uma expressão regular consegue lidar com isso