Saturday 13 December 2008

Funciones y operadores en consultas MySQL

¿Necesitas consultar una tabla MySQL ordenada por un campo al que le aplicas una función? Por ejemplo, tal vez el tipo de datos de una columna es CHAR o VARCHAR, pero en realidad ahí almacenas "numeros decimales", y necesitas hacer un SELECT ordenado según el valor "decimal" de ese campo. En ese caso necesitarás conocer el "operador" MySQL adecuado ;)

Vamos a ver un ejemplo. Supongamos que en mi tabla 'vehiculos' tengo 2 registros solamente con los siguientes campos (los dos del tipo VARCHAR) y valores:





vehiculoprecio
v_1120,44
v_282,33

Si yo ejecuto este query de MySQL:


SELECT * FROM vehiculos ORDER BY precio

Entonces, al ser el campo precio de tipo VARCHAR, los registros se me ordenarán de forma alfabética de menor a mayor, quedando así:




v_1120,44
v_282,33

que no es lo que yo quería conseguir!!! Pues lo que yo quería obtener es los precios ordenados por su valor decimal, es decir, primero el vehiculo de precio=82,33. Entonces la solución pasa por utilizar el "operador" TRUNCATE(valor,num_decimales), dónde puedo utilizar el nombre del campo 'precio' (sin las comillas) como valor, y poner un 2 en num_decimales, con lo que MySQL me ordenará los registros de mi tabla por el valor numérico de 2 decimales correspondiente al campo 'precio' ;)


SELECT * FROM vehiculos ORDER BY TRUNCATE(precio,2)

Igual que este operador, hay una lista bastante larga de operadores numéricos y de cadena para transformar los valores almacenados en los campos de nuestras tablas y que podemos insertar en nuestras consultas MySQL. Y no sólo en el parámetro ORDER BY, sino también en el WHERE on el SET o dónde sea!!!! :D


En la página oficial de MySQL Operator and Function Reference encontraréis la lista completa y como se usa cada uno de ellos! Muy recomendable el echarle una lectura rápida... para al menos saber qué se puede y qué no se puede hacer, jejejeje...