funciones-conversion-cast-convert

Funciones de conversión CAST y CONVERT

  • 4 min

Las funciones de conversión en T-SQL nos permiten transformar un valor de un tipo de datos a otro.

En el mundo de las bases de datos, los tipos de datos son sagrados. Un número es un número y un texto es un texto. SQL Server es un lenguaje fuertemente tipado, lo que significa que no le gusta nada que intentemos mezclar peras con manzanas.

Si intentas ejecutar esto:

SELECT 'El precio es: ' + 50;
Copied!

SQL Server te tirará un error. ¿Por qué? Porque está intentando sumar (matemáticamente) un texto con un número, y eso no tiene sentido lógico para el motor.

Para solucionar esto, necesitamos realizar una conversión de tipos. T-SQL nos ofrece dos herramientas principales para ello: CAST y CONVERT.

CAST: El Estándar ANSI

La función CAST es la forma estándar (ANSI SQL) de convertir un dato de un tipo a otro.

CAST(Valor AS NuevoTipo)
Copied!

Volvamos al ejemplo del error anterior. Para que funcione, necesitamos convertir el número 50 a texto (VARCHAR) antes de concatenarlo.

SELECT 'El precio es: ' + CAST(50 AS VARCHAR(10));
-- Resultado: "El precio es: 50"
Copied!

También podemos usarlo para truncar textos o reducir la precisión de decimales:

SELECT CAST('Texto Demasiado Largo' AS VARCHAR(5)); 
-- Resultado: "Texto"

SELECT CAST(123.4567 AS DECIMAL(10,2));
-- Resultado: 123.46 (Redondeado)
Copied!

CONVERT: La potencia de SQL Server

La función CONVERT es específica de SQL Server. Hace lo mismo que CAST (cambiar tipos), pero permite añadir el Estilo.

Cuando convertimos fechas a texto, CAST nos da un formato por defecto que a menudo no nos gusta. CONVERT nos permite especificar cómo queremos que se vea esa fecha.

CONVERT(NuevoTipo, Valor, [Estilo])
Copied!

El parámetro “Estilo” (Fechas)

Este es el motivo principal por el que usamos CONVERT. El tercer parámetro es un código numérico que define el formato de salida.

Aquí tienes los códigos más útiles que usarás día tras día (especialmente el 103 para formato europeo y el 112 para ISO):

CódigoFormatoEjemplo
103dd/mm/aaaa31/12/2023
101mm/dd/aaaa12/31/2023
112aaaammdd20231231
120aaaa-mm-dd hh:mi2023-12-31 23:59:59
108hh:mi23:59:59
DECLARE @Hoy DATETIME = GETDATE();

SELECT 
    CAST(@Hoy AS VARCHAR(20)) AS ConCast,
    CONVERT(VARCHAR(20), @Hoy, 103) AS FormatoEspañol,
    CONVERT(VARCHAR(20), @Hoy, 112) AS FormatoISO;
Copied!

Usa CAST siempre que sea posible para mantener tu código limpio y estándar. Usa CONVERT únicamente cuando necesites dar un formato específico a una fecha o número.