Cuando trabajás con fechas en SQL Server, es inevitable que en algún momento necesites convertir datos de un formato a otro. Ahí es donde descubris a CAST y CONVERT y no sabés cual es la diferencia entre ambas y tampoco tenes idea de cómo usarlas…
Estas funciones son esenciales para convertir datos y aunque similares, tienen sus diferencias.
🔹 ¿Cuál es mejor para trabajar con fechas?
🔹 ¿Qué diferencias tienen en la práctica?
🔹 ¿Cómo evitar errores al usarlas?
Hoy responderemos esas preguntas con ejemplos claros, desde lo básico hasta lo avanzado, y exploraremos los 10 errores más comunes al usarlas en fechas.
¿Qué diferencias tienen las funciones Cast y Convert?
Ambas funciones sirven para convertir un tipo de dato en otro, pero …
Función | Características |
---|---|
CAST | ✅ Es la función estándar de ANSI SQL. |
CONVERT | ✅ Exclusiva de SQL Server. |
📌 Regla clave:
Vamos a los ejemplos
🔹 Ejemplo 1: Convertir una Cadena a Fecha
✅ CAST (Conversión Estándar)
SELECT CAST(‘2024-02-01’ AS DATE) AS Fecha_Convertida;
🔹 Resultado:
Fecha_Convertida |
---|
2024-02-01 |
✅ CONVERT (Especificando Formato)
SELECT CONVERT(DATE, ’01/02/2024′, 103) AS Fecha_Convertida;
🔹 Resultado:
Fecha_Convertida |
---|
2024-02-01 |
📌 Diferencia clave:
Convertir Fechas a Texto
A veces necesitas convertir fechas a texto para reportes o exportaciones. Aca van los ejemplos
🔹 Ejemplo 2: Convertir una Fecha a Texto
✅ Usando CAST:
SELECT CAST(GETDATE() AS VARCHAR(20)) AS Fecha_Texto;
🔹 Resultado:
Fecha_Texto |
---|
Feb 1 2024 2:30PM |
✅ Usando CONVERT con un Formato Específico:
SELECT CONVERT(VARCHAR, GETDATE(), 103) AS Fecha_Formateada;
🔹 Resultado:
Fecha_Formateada |
---|
01/02/2024 |
📌 Diferencia clave:
Convertir Tipos de Fechas en SQL Server
✅ Ejemplo 3: Convertir entre formatos de fecha
SELECT
CAST(GETDATE() AS DATETIME2) AS Convertido_DATETIME2,
CONVERT(VARCHAR, GETDATE(), 120) AS Convertido_Texto_ISO;
🔹 Resultado:
Convertido_DATETIME2 | Convertido_Texto_ISO |
---|---|
2024-02-01 14:30:00.1234567 | 2024-02-01 14:30:00 |
📌 Diferencia clave:
Los 10 Errores Más Comunes con CAST y CONVERT (y cómo evitarlos)
1 No especificar el formato al convertir texto a fecha
🔴 Error:
SELECT CONVERT(DATE, ’01/02/2024′, 101); — MM/DD/YYYY
🔹 Resultado incorrecto: 2024-01-02 en vez de 2024-02-01.
✅ Solución: Usa el estilo correcto (103 para DD/MM/YYYY).
SELECT CONVERT(DATE, ’01/02/2024′, 103);
2️ Convertir texto inválido a fecha
🔴 Error:
SELECT CAST(’31-Feb-2024′ AS DATE);
❌ Falla: Conversion failed when converting date and/or time from character string.
✅ Solución: Usa ISDATE() antes de convertir.
SELECT IIF(ISDATE(’31-Feb-2024′) = 1, CAST(’31-Feb-2024′ AS DATE), ‘Fecha Inválida’);
3️ No definir tamaño de VARCHAR al convertir fechas a texto
🔴 Error:
SELECT CAST(GETDATE() AS VARCHAR);
❌ Falla: Puede truncar la fecha.
✅ Solución: Define el tamaño.
SELECT CAST(GETDATE() AS VARCHAR(20));
4️ Usar CAST en vez de CONVERT para formatear fechas
🔴 Error:
SELECT CAST(GETDATE() AS VARCHAR);
✅ Solución: Usa CONVERT con un formato definido.
sql
CopiarEditar
SELECT CONVERT(VARCHAR, GETDATE(), 103);
5️ No convertir antes de concatenar
🔴 Error:
SELECT ‘Hoy es ‘ + GETDATE();
❌ Falla: Conversion failed when converting date and/or time from character string.
✅ Solución: Convierte antes de concatenar.
SELECT ‘Hoy es ‘ + CONVERT(VARCHAR, GETDATE(), 103);
6️ Olvidar el redondeo en SMALLDATETIME
🔴 Error:
SELECT CAST(‘2024-01-31 14:35:29’ AS SMALLDATETIME);
🔹 Resultado: 2024-01-31 14:36:00 (redondeado).
✅ Solución: Usa DATETIME2 si necesitas más precisión.
7️ Comparar fechas sin truncar la hora
🔴 Error:
SELECT * FROM Pedidos WHERE FechaPedido = ‘2024-01-31’;
🔹 Problema: No devuelve registros si FechaPedido tiene hora.
✅ Solución:
SELECT * FROM Pedidos WHERE CAST(FechaPedido AS DATE) = ‘2024-01-31’;
8️ Usar YEAR() en filtros y romper los índices
🔴 Error:
SELECT * FROM Ventas WHERE YEAR(FechaVenta) = 2024;
✅ Solución: Usa rangos de fechas.
SELECT * FROM Ventas WHERE FechaVenta BETWEEN ‘2024-01-01’ AND ‘2024-12-31’;
9️ No validar diferencias entre fechas antes de operar
🔴 Error:
SELECT DATEDIFF(YEAR, ‘2000-12-31’, ‘2024-01-01’);
🔹 Resultado incorrecto: 24 en vez de 23.
✅ Solución: Usa cálculos más precisos.
SELECT DATEDIFF(DAY, ‘2000-12-31’, ‘2024-01-01’) / 365.25;
🔟 No verificar el formato antes de exportar
✅ Solución: Usa siempre CONVERT() con 120 para ISO 8601.
SELECT CONVERT(VARCHAR, GETDATE(), 120);
Conclusión: CAST vs. CONVERT.
✔️ Usa CAST para conversiones estándar entre datatypes.
✔️ Usa CONVERT para formatear fechas.
✔️ Evita errores comunes usando los estilos correctos.
🚀 Mucha suerte con estas funciones. Si tenes dudas o consultas podes escribirnos a info@dba24.com.ar