Order by campo varchar

20/03/2012

0

Olá bom dia Pessoal
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

Jocemar Strer

Responder

Posts

20/03/2012

Joel Rodrigues

Quando um campo é do tipo texto, sua ordenação se dá pela ordem alfabética.
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.
Responder

20/03/2012

Jocemar Strer

Joel Rodrigues obrigado pela responsta,acho que entendi oque você quis dizer... eu tentei o seguinte

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.
Responder

20/03/2012

Jocemar Strer

Amigo muito obrigado pela colaboração acho que resolvi o problema...
agradeço sua participação,o comando ficou assim

ORDER BY RIGHT(B.NEXEMPLAR,2)

Obrigado!!
Responder

20/03/2012

Joel Rodrigues

É, funcionou exatamente como eu tinha falado, ordenou somente pela parte numérica do texto. Eu é que tinha esquecido da função RIGHT, falha minha.
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...
Responder

20/03/2012

Jocemar Strer

Nesse meu caso nao vai existir um exemplar 100...mas é uma questão a ser pensada...desculpe por minha ignorância,abusando um pouco da sua boa vontade oque vem a ser o LEN?entendi que através do LEN(B.NEXEMPLAR)-3 ele subtrairá, mas como eu sei que ele subtrairá da esquerda para a direita?ou não é assim que esse comando funciona?
obrigado novamente!
Responder

21/03/2012

Joel Rodrigues

A função LEN retorna o comprimento do string. Por exemplo, LEN(´EX.10´) retorna 5.
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?
Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar