Order by y tipo de variable

Hola,
tengo dos problemas:
1. Sobre una consulta SELECT utilizando ORDER BY. Yo hago lo siguiente
"SELECT * FROM TABLA1 ORDER BY KEY"
La consulta se realiza bien, pero resulta que me ordena de una forma muy rara. Decir que KEY es de tipo texto. Y contiene los siguientes valores: 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 19, 20.
Y el resultado que me da es el siguiente: 10, 11, 12, 19, 2, 20, 3, 4, 5, 6, 7, 8, 9. ¿Por qué?
2. La otra consulta es si yo puedo saber con sql que tipo de variable es una variable. Es decir puedo saber si KEY es un varchar o un int.

1 Respuesta

Respuesta
1
Te lo ordena así porque lo ordena alfabéticamente.
Alfabéticamente el "1" está antes que el "2", por lo que "10" está antes que "20"
Para que te lo ordene bien puedes hacer una conversión a número. Depende un poco de la BD que utilices. Si usas Oracle sería algo como order by to_number(key).
También puedes saber el tipo de variable. Simplemente ejecuta "desc nombre_tabla" y te aparecerá una descripción de los campos de la tabla y el tipo que tienen. En muchos casos hay otras formas de hacerlo consultando tablas internas de la base de datos, pero necesitaría saber con cuál estás trabajando tú.
Hola,
Mi base de datos es Microsoft Access. No me ha funcionado "order by to_number(key)".
Si (por desgracia) usas MS Access, tienes la función CInt
¿Puedes probar con order by CInt(key)?
Aprovecho para recomendarte que almacenes los datos numéricos como numéricos en otra ocasión :)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas