Order by campo varchar
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
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
Curtidas 0
Respostas
Joel Rodrigues
20/03/2012
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.
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.
GOSTEI 0
Jocemar Strer
20/03/2012
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.
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.
GOSTEI 0
Jocemar Strer
20/03/2012
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!!
agradeço sua participação,o comando ficou assim
ORDER BY RIGHT(B.NEXEMPLAR,2)
Obrigado!!
GOSTEI 0
Joel Rodrigues
20/03/2012
É, 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...
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...
GOSTEI 0
Jocemar Strer
20/03/2012
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!
obrigado novamente!
GOSTEI 0
Joel Rodrigues
20/03/2012
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?
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?
GOSTEI 0