Funciones de conversión de tipos, CAST
Cuando hacemos operaciones con valores de distintos tipos de datos, el SGBD intenta convertirlos al tipo necesario. Por ejemplo, abajo comparamos valores de tipo STRING e INT. Para hacer esta comparación, el SGBD convierte automáticamente el valor de cadena en un valor numérico.
MySQL 8.4SELECT '50' > 49 AS comparison_1, '50' > 51 AS comparison_2;
MySQL 8.4SELECT '50' > 49 AS comparison_1, '50' > 51 AS comparison_2;
Pero el SGBD no puede hacer todas las conversiones automáticamente, y en esos casos hay que convertir el tipo de forma explícita.
Para ello, MySQL tiene dos funciones muy parecidas: CAST y CONVERT.
Para ello, PostgreSQL tiene la función CAST y el operador ::.
Sintaxis
CAST(valor AS tipo)
CONVERT(valor, tipo)- valor
Lo que hay que convertir: un número, una cadena, una fecha o una columna de una tabla.
- tipo
El tipo al que se convierte el valor. Los tipos disponibles aparecen más abajo.
Por ejemplo:
MySQL 8.4SELECT CAST(12005.6 AS DECIMAL) AS cast_example, CONVERT(12005.4, DECIMAL) AS convert_example;
CAST(valor AS tipo)
valor::tipo- valor
Lo que hay que convertir: un número, una cadena, una fecha o una columna de una tabla.
- tipo
El tipo al que se convierte el valor. Los tipos disponibles aparecen más abajo.
Por ejemplo:
MySQL 8.4SELECT CAST(12005.6 AS INTEGER) AS cast_example, 12005.4::INTEGER AS operator_example;
La función CAST puede convertir el valor que recibe en cualquiera de los siguientes tipos:
La función CAST puede convertir el valor que recibe en cualquiera de los siguientes tipos:
No todo se puede convertir
La función CAST exige que el valor de origen tenga un formato concreto. Y enseguida surge la pregunta: ¿qué pasa si ese formato no es el necesario? Por ejemplo, si intentas convertir un texto cualquiera en un tipo de datos de fecha y hora:
MySQL 8.4SELECT CAST('SQL Academy' AS DATETIME) AS invalid_cast;
En este caso, MySQL devolverá NULL en lugar del valor convertido.
MySQL 8.4SELECT CAST('SQL Academy' AS TIMESTAMP) AS invalid_cast;
En este caso, PostgreSQL devolverá un error, porque la cadena no se puede convertir en una fecha.
Autoevaluación
Entonces, ¿para qué sirve la función CAST en SQL? 🧐