Introducción
MySQL es el gestor de base de datos más querido. Seguramente alguna vez vamos a querer castear un valor.
Castear un valor es cambiar su tipo, o convertirlo a otro tipo de dato. Por ejemplo, puede que necesitemos convertir una cadena a entero, a flotante, booleano, etcétera.
En mi caso tenía que cambiar todos los datos de mi tabla para que dejaran de ser flotantes y fueran enteros.
Veamos entonces algunos ejemplos de cómo castear o cambiar valores en MySQL.
Sintaxis
Bueno, MySQL en su sitio oficial dice que la sintaxis es:
Es una función que castea valores. Y los tipos de datos son:
- BINARY
- CHAR
- DATE
- DATETIME
- DECIMAL
- JSON
- NCHAR
- SIGNED
- TIME
- UNSIGNED
Para convertir a entero elegimos SIGNED o UNSIGNED.
La diferencia es que el que tiene signo soporta valores negativos, y el unsigned sólo soporta enteros (útil cuando queremos almacenar grandes números positivos).
Ejemplos
Decimal o flotante a entero
Cuando queremos convertir un valor flotante (como 9.5) a entero, el primer valor se redondeará hacia abajo o hacia arriba.
Esto depende de la parte decimal. Si la parte decimal es menor que cinco, entonces se redondea hacia abajo. Si es 5 o mayor que eso, se redondea hacia arriba.
Aquí algunas pruebas:
Nota: si quieres más sobre redondeo mira este post.
Entero a flotante
De esta conversión no hay mucho que decir. Simplemente redondeará y agregará los ceros a la derecha del punto.
Te invito a leer este post sobre decimales para entender mejor la conversión.
Si convertimos, por ejemplo, el entero 5 a un decimal con una precisión de 3, este se convertirá en 5.000.
Aquí algunos ejemplos:
Si no entiendes el número 7, lee el post que mencioné arriba. Básicamente le decimos a MySQL que la mayor longitud del número será de 7 cifras, y el número a la derecha (3 y 5 respectivamente) es para indicar cuántos decimales se ocuparán.
En el primer caso ocupamos 3 decimales y en el segundo 5.
Entero a cadena
Igual esto es de lo más sencillo. Simplemente convertimos un entero, que será el mismo entero pero representado como cadena. 5 se convierte en “5”.
La diferencia es que podemos operar con funciones de cadena, ya que ahora sí serán de ese tipo.
De todos modos he probado y no hay diferencia entre trabajar con cadena o con enteros, ya que el motor infiere.
Aunque si queremos asegurarnos, podemos hacerlo así:
Entero a booleano
Ahora veamos cómo convertir un número a true o false, o lo mismo que convertir un int a un booleano.
MySQL no proporciona una función para esto, pero podemos utilizar la función IF.
Conclusión
Como podemos ver, podemos castear cualquier tipo de dato a otro tipo de dato, aunque primero debemos evaluar los resultados para no confundirnos ni realizar cosas erróneas.