Pregunta

Tengo una columna de números almacenados como caracteres. Cuando hago un ORDER BY para esta columna me sale el siguiente:

100
131
200
21
30
31000
etc.

Como puedo ordenar estos caracteres numéricamente? ¿Es necesario para convertir algo o hay ya un comando SQL o función para esto?

Gracias.

¿Fue útil?

Solución

Prueba esto:

ORDER BY CAST(thecolumn AS int)

Otros consejos

Esto funcionó para mí:

ORDER BY ABS(column_name)

Este es un problema con el pedido cadenas numéricas en un "tipo natural" (si las operaciones de búsqueda "clasificación natural" en Google encontrará un montón de cosas). Esencialmente fundición de la cadena como int y clasificación en el valor resultante debe solucionarlo.

La razón de esto es que con un tipo de datos char, está ordenando las filas como una cadena.

La idea de ORDER BY CAST() es correcto, sin embargo el rendimiento de este será recordado como el número de resultados devueltos aumenta.

Si se trata de sólo datos numéricos en esta columna, lo mejor sería encontrar un tipo de datos numérico adecuado y cambiarlo.

Si realmente no puede cambiar la columna y usted se encuentra con problemas de rendimiento, Sugiero tener una columna de orden de clasificación que contiene el elenco valor a un número entero (valores nulos se convierte en un valor apropiado).

Índice de la columna de la orden de clasificación e idealmente, añadir un disparador para la columna CHAR para que las inserciones o actualizaciones en el valor Char desencadenan una actualización al valor entero.

En algunas situaciones esto podría ser un buen partido:

ORDER BY LENGTH(column_name), column_name

Especialmente si usted tiene una columna, ya sea con todos los dígitos o una combinación de letras y números, pero todos con la misma longitud.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top