Ordenaciones en MySQL

Pongamos que tenemos un campo en base de datos de tipo texto en el cuál guardamos datos de varios tipos, números, fechas, etc. y queremos hacer listados ordenados con este campo. Con las cadenas no hay ningún problema ya que con la sentencia order by se pueden realizar ordenaciones fácilmente, el problema surge cuando queremos ordenar otro tipo de datos. Imaginemos que en el campo de texto tenemos guardados una serie de números y realizamos un listado ordenado con order by.


> select * from my_table order by value;

el resultado sería


> 10, 15, 20, 25, 5

¿Por qué? Pues porque el resultado se ordena como si fuera una cadena, es decir, columna por columna y nunca saldrá ordenado tal y como queremos. La solución, utilizar el método CONVERT(expr,type) de MySQL. Donde expr es el campo o expresión que queremos convertir y type el tipo de conversión que queremos hacer teniendo las siguientes opciones :

    • BINARY
    • CHAR
    • DATE
    • DATETIME
    • DECIMAL
    • SIGNED
    • TIME
    • UNSIGNED

Para nuestro ejemplo


> select * from my_table order by CONVERT(value,SIGNED);

obteniendo el resultado que queríamos desde un principio


> 5, 10, 15, 20, 25

Para el resto de tipos pasa más de lo mismo, aunque el campo sea de tipo STRING, o cualquier otro, con un rápido cast se puede convertir al tipo que se quiera y hacer una ordenación correcta.

Para más información: http://dev.mysql.com/doc/refman/5.0/en/cast-functions.html#function_convert

Anuncios
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: