Volver a la lista de artículos Artículos
Lectura de 7 minutos

Función SQL CAST(): Visión General

La funciónSQL CAST() convierte un tipo de datos en otro. En este artículo se explica para qué sirve esta función y cuándo y cómo utilizarla.

En las bases de datos relacionales, cada columna tiene un tipo de datos definido que controla qué tipo de datos se almacenan en la columna y cómo se pueden utilizar esos datos. Por ejemplo, es probable que la descripción de un producto se almacene como una cadena de texto, y no podría utilizarla para realizar operaciones aritméticas (por ejemplo, calcular totales).

En cambio, el saldo deudor de un cliente se almacenaría como dato numérico y podría utilizarse en cálculos. SQL dispone de conjuntos de funciones independientes para las operaciones numéricas y para la manipulación de cadenas.

Ocasionalmente, puede que desee anular estas reglas y tratar una columna de forma diferente a las operaciones habituales de su tipo de datos. Aquí es donde resulta útil la función SQL CAST(). Convierte un dato en otro tipo de datos dentro de la consulta. Más adelante veremos algunos ejemplos de cuándo puede ser necesario hacer esto.

Si quieres profundizar en tus conocimientos de SQL, consulta nuestro curso SQL de la A a la Z. Este conjunto de 7 cursos te lleva desde principiantes hasta temas avanzados de SQL. Adquirirá experiencia práctica trabajando en más de 700 ejercicios guiados; por el camino, se familiarizará con los conceptos de las bases de datos relacionales. Todo lo que necesita es un navegador y una conexión a Internet, y dispondrá de ayuda en cada paso.

Sintaxis de la función SQL CAST()

La función CAST() tiene la misma sintaxis sencilla en todos los dialectos de SQL:

CAST(value AS type)

  • value puede ser cualquier valor SQL válido. Puede ser el nombre de una columna, el resultado de un cálculo, el resultado de una función o un valor literal.
  • type es el tipo de datos deseado, es decir, en qué quiere convertir el valor.

Por ejemplo, supongamos que la columna date_hired de la tabla employee se ha definido como un tipo de datos DATE. Desea rellenarla con la fecha de hoy utilizando la función GETDATE(), que devuelve un valor del tipo DATETIME.

Puede convertir el valor DATETIME en un valor DATE utilizando esta sintaxis:

INSERT INTO employee (date_hired)
VALUES (CAST(GETDATE() AS DATE));

CAST() Ejemplos de funciones

Veamos algunos ejemplos de cómo puede utilizarse CAST() en su trabajo diario.

1. Uso de números como cadenas

Una tabla denominada employee tiene el campo departamento, que está definido como el tipo de datos INT (entero). Los tres primeros dígitos de este código indican la sección de la organización.

La dirección quiere saber cuántas personas trabajan en cada sección. Para ello, necesitamos extraer los tres primeros dígitos del departamento. Tenemos que convertir este valor INT en un valor VARCHAR y, a continuación, utilizar la función de cadena LEFT() para recuperar los tres primeros caracteres.

La consulta tiene el siguiente aspecto:

SELECT 
  LEFT(CAST (department AS VARCHAR(15)), 3) AS section, 
  COUNT(*) AS employee_count
FROM employee
GROUP BY LEFT(CAST (department AS VARCHAR(15)), 3)
ORDER BY LEFT(CAST (department AS VARCHAR(15)), 3);

Observe que CAST() está incrustada dentro de la función LEFT() y que las funciones deben repetirse en las cláusulas GROUP BY y ORDER BY.

2. Unir tablas en columnas con diferentes tipos de datos

La tabla employee del ejemplo anterior debe unirse a otra tabla department_details, cuyo campo code está definido como VARCHAR. Normalmente, la unión de la columna departamento en employee a la columna code en department_details daría lugar a un error, ya que los campos tienen tipos de datos diferentes. Sabemos que el código de departamento siempre será numérico, por lo que podemos evitar el problema convirtiendo el código en un entero.

La consulta quedaría así:

SELECT department_name, name, date_hired
FROM employee
JOIN department_details 
ON department = CAST(code AS int);

3. Cambio de tipos de campo en una operación ETL

Un proceso de fabricación tiene sensores en varios puntos que generan un estado de alarma cada vez que se encuentra una condición inusual. Estas alarmas se cargan automáticamente en una tabla denominada alarms. Un proceso diario copia las filas de alarms en una tabla del almacén denominada alarm_historyque puede utilizarse para el análisis. La tabla alarms tabla se borra.

La tabla alarms tiene el siguiente aspecto:

clock_time 		varchar(20),
sensor_no 		int,
status_code 	char(2)

La tabla alarm_history es similar, pero la hora del reloj debe almacenarse como DATETIME, ya que los gestores necesitarán extraerla y analizarla por un intervalo de fechas. Se define así:

clock_time 		datetime,
sensor_no 		int,
status_code 	char(2)

La consulta que copia los datos a alarm_history necesita convertir el VARCHAR clock_time a un tipo de datos DATETIME. Su aspecto es el siguiente

INSERT INTO alarm_history
SELECT 
  CAST(clock_time AS DATETIME),
  sensor_no,
  status_code
FROM alarms;

Cuándo utilizar CAST()

Veamos algunos escenarios en los que la función SQL CAST() puede ser útil.

  • Operaciones ETL (Extraer, Transformar, Cargar): ETL toma datos de una o más fuentes y los transforma en la forma necesaria para un uso diferente. Por ejemplo, puede tomar datos almacenados en un sistema utilizado para las operaciones cotidianas de una empresa y cargarlos en un almacén de datos adecuado para el análisis de marketing. Los tipos de datos del almacén de datos pueden ser diferentes de los del sistema original, por lo que CAST() es importante en este caso.
  • Utilización de funciones pertenecientes a un tipo de datos diferente Puede haber ocasiones en las que desee utilizar funciones de cadena en datos numéricos, por ejemplo, para dar formato a los datos de un informe. Del mismo modo, puedes querer utilizar funciones numéricas y agregados en datos de cadena (siempre que sepas que la columna contiene números).
  • Unir tablas en columnas con distintos tipos de datos: Esto no suele ocurrir si la base de datos ha sido bien diseñada, pero en la práctica puede ocurrir.
  • Trabajar con fechas almacenadas como cadenas. A veces, los diseñadores de bases de datos almacenan las fechas como cadenas de texto; estas fechas no pueden utilizarse para funciones y cálculos de fechas. Puede evitarlo utilizando CAST().
  • Uso de SQL dinámico: Si está escribiendo programas o procedimientos almacenados, puede que necesite incorporar datos a una cadena para construir una consulta dinámica.

Si su consulta devuelve un error debido a un tipo de datos no coincidente, la función CAST() es probablemente la solución a su problema.

Tipos de datos soportados por los dialectos SQL más populares

1. Servidor SQL

SQL Server permite utilizar cualquiera de sus tipos de datos válidos como parámetro de tipo en la función CAST(). Algunas conversiones no están permitidas cuando los tipos de datos no son compatibles. Puede comprobar qué conversiones están permitidas en la documentación de T-SQL.

Para una cobertura completa de la función CAST() en SQL Server, consulte la documentación de Microsoft sobre las funciones CAST() y CONVERT().

2. MySQL

MySQL no es estándar en el sentido de que no utiliza el tipo de datos para el parámetro type. En su lugar, tiene un conjunto fijo de valores permitidos:

  • BINARY
  • CHAR (Nota: Este tipo se utiliza para cualquier tipo de valor de cadena, por ejemplo VARCHAR o TEXT. El motor de la base de datos decidirá el tipo de datos producido en función de la longitud del texto).
  • DATE
  • DATETIME
  • DECIMAL
  • DOUBLE
  • FLOAT
  • JSON
  • NCHAR
  • REAL
  • SIGNED
  • SPACIAL_TYPE
  • UNSIGNED
  • YEAR

Puede encontrar más información sobre CAST() en el manual de referencia de MYSQL.

3. Oracle

Oracle utiliza el tipo de datos para el parámetro type. La documentación tiene una tabla de tipos de datos que son válidos para la conversión.

4. PostgreSQL

PostgreSQL utiliza el tipo de datos para el parámetro type. La documentación de PostgreSQL no indica explícitamente qué conversiones están permitidas, pero las conversiones estándar entre cadenas, números y fechas están bien.

PostgreSQL le permite crear sus propias reglas de casting para conversiones no estándar usando la función CREATE_CAST.

¿Qué sigue con la función SQL CAST()?

Hemos tenido una introducción completa a la función SQL CAST() y como usarla. Si buscas un programa de estudio completo que cubra no sólo los aspectos básicos, sino también temas avanzados -incluido CAST() -, quiero recomendarte una vez más nuestro curso SQL de la A a la Z. Está repleto de consejos útiles, ejercicios prácticos y opiniones de expertos.

Buena suerte y feliz aprendizaje.