Pergunta

Eu tenho uma coluna de números armazenados como caracteres. Quando eu faço um ORDER BY para esta coluna recebo a seguinte:

100
131
200
21
30
31000
etc.

Como posso encomendar estes caracteres numericamente? Eu preciso converter algo ou já existe um comando ou função SQL para isso?

Obrigado.

Foi útil?

Solução

Tente isto:

ORDER BY CAST(thecolumn AS int)

Outras dicas

Isso funcionou para mim:

ORDER BY ABS(column_name)

Este é um problema com ordenando seqüências numéricas em um "tipo natural" (se você pesquisa "ordenação natural" no Google que você vai encontrar toneladas de material). Essencialmente lançando a string como int e classificação sobre o valor resultante deve corrigi-lo.

A razão para isso é que, com um tipo de dados char, você está classificando as linhas como uma string.

A idéia de ORDER BY CAST() está correto, no entanto desempenho deste vai ficar como o número de resultados retornados aumenta.

Se é apenas dados numéricos nesta coluna, a melhor prática seria a de encontrar um tipo de dados numérico adequado e alterá-lo.

Se você realmente não pode alterar a coluna e você está tendo problemas de desempenho, Sugiro ter uma coluna de ordem de classificação, que contém o valor de elenco para um inteiro (será nulos convertido para um valor apropriado).

Índice da coluna ordem de classificação e, idealmente, adicionar um gatilho para a coluna CHAR para que as inserções ou atualizações para o gatilho valor de char uma atualização para o valor inteiro.

Em algumas situações isso pode ser um bom jogo:

ORDER BY LENGTH(column_name), column_name

Especialmente se você tem uma coluna com tanto todos os dígitos ou uma combinação de letras e algarismos, mas todos com o mesmo comprimento.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top