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.
e pra que guardar ordenado??? basta dar um order by no select!! no maximo criar um indice crescente para o campo no oracle!!!
P
peczenyj
um select sem order by não necessariamente vai mostrar do inicio ao fim de uma tabela…
A
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?
P
peczenyj
vc podia ter algo assim
ano 01
ano 02
…
ano 10
ou vc podia usar a função ‘regexp_replace’ para remover todos os caracteres que não são numeros.
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?
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í.
P
plentz
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.
A
aloizio
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.
F
fabio.patricio
Olá,
Nesse teu exemplo qual seria a ordenacao correta.
]['s
A
aloizio
peczenyj você sugeriu ano 01 ano 02 … ano 10. Não atende pois o usuário pode entrar tanto com ano 1 quanto ano 02.
Alguma sugestão como poderia escrever uma expressão regular, para tratar isso junto ao order by do SQL?
A
aloizio
Fabio
A ordenação correta seria:
ab2c, ab45d, ano 1, ano 2 , ano 17
exatamente essa.
F
fabio.patricio
Olá,
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.
]['s
P
peczenyj
Qual a ordem que vc espera desses campos:
ab2c, ab45d, ano 1, ano 2 , ano 17
Explique a sua lógica ?
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
B
boaglio
Não tem jeito mesmo, só tem 3 alternativas:
:arrow: trate isso na aplicação diferenciando número de texto
:arrow: treine o usuário para colocar a informação da maneira apropriada
:arrow: deixe como está e o resultado não será ordenado como o usuário espera