Order by campo varchar
20/03/2012
0
Eu tenho uma situação e não estou conceguindo resolvela vou tentar ilustra-lá para vcs
eu tenho uma tabela onde guardo registros de exemplares de publicalções exemplo:
EX.1
EX.2
EX.10
EX.12 (EX- quer dizer exemplar e não exemplo)
etc...
estou tentando ordenar por esse campo mas oq acontece é que ele ordena assim atrvés do order by N.EXEMPLAR
EX.1
EX.10
EX.12
EX.2
mas oq eu queria era ordenar na order dos exemplar desse jeito..
EX.1
EX.2
EX.10
EX.12
será que isso é possivel ....des de já agradeço.
Att:Joce
Jocemar Strer
Posts
20/03/2012
Joel Rodrigues
Eu imagino duas soluções (para contornar a situação):
1) Você pega somente a parte do texto que representa o número do exemplar (EX.10 = 10) e ordena por essa parte, convertendo-a para inteiro.
2) Você criar um campo numérico que guarde o número do exemplar, assim poderá ordenar por ele. Para atualizar esse campo no primeiro momento, pegaria o trecho citado acima, converteria para número e jogaria no campo.
Boa sorte.
20/03/2012
Jocemar Strer
ORDER BY CAST(N.EXEMPLAR AS NUMERIC)
porem com isso ele me retorna um erro que nao pode converter texto para numero...
oque eu acho que você quis dizer é pegar somente a parte correspondente ao numero (EX.10=10)...
mas confesso que não conheço método para fazer isso.
20/03/2012
Jocemar Strer
agradeço sua participação,o comando ficou assim
ORDER BY RIGHT(B.NEXEMPLAR,2)
Obrigado!!
20/03/2012
Joel Rodrigues
Dica: você pegou somente os dois últimos caracteres do exemplar. E se tiver o exemplar EX.100?
Ao invés do número 2 direto, use uma expressão equivalente: LEN(B.NEXEMPLAR)-3
Ou seja, pegará a quantidade de caracteres total do texto e subtrairá 3 referente à parte EX. (3 caracteres), com isso retornará apenas a diferença (o que sobra à direita).
Espero ter sido claro. Até a próxima...
20/03/2012
Jocemar Strer
obrigado novamente!
21/03/2012
Joel Rodrigues
Como o exemplar é composto por uma parte fixa (creio eu) ´EX.´ e mais um número (10, no exemplo), podemos pegar a quantidade de dígitos do número, da direita para a esquerda, utilizando o comprimento total do exemplar menos o da parte fixa.
Ou seja:
- LEN(´EX.10´) = 5
- a parte fixa ´EX.´ contem 3 caracteres;
- o restante (que deve ser o número) deve ter 5 - 3 = 2 (o 2 que você fixou, só que agora calculado);
Assim, para qualquer exemplar, você pode usar LEN(B.NEXEMPLAR)-3 que retornará apenas o comprimento da parte numérica.
Exemplos:
EX.5 = 1
EX.10 = 2
EX.234 = 3
Beleza?
Clique aqui para fazer login e interagir na Comunidade :)