jueves, 23 de diciembre de 2010

Convertir número en Fecha T-SQL

Hoy recibí uno de esos requerimientos que uno no espera recibir un 23 de Diciembre, el cual tenia que ver con un análisis sobre una muestra de aproximadamente 500.000 registros. En si el trabajo no era largo, sin embargo me encontré con un factor que no había contemplado; La fecha viene como un número real! Imaginen mi cara cuando tenia que ver el motivo de la caída de una venta gestionada el día "40452,38138".

Particularmente en mi caso, de la "Fecha" sólo me interesa conocer el día, el mes y el año, por lo que dedique un par de horas en entender como funciona la fecha en SQL Server. Tras ir y venir en Google, MSDN e inclusive en la ayuda de Excel, llegué a la conclusión de que el primer día del primer año fue "01 de Enero de 1900".


Sin embargo, para poder obtener el día de una Fecha, no hay que posicionarse en el primer día del primer año, sino que en el día anterior. Esto es volver un día atrás y un año atrás, osea al "31 de Diciembre de 1899" y además considerar que el año 1900 es bisiesto (las cosas de la vida!).

En la práctica es necesario tomar todos los dígitos previos a la coma (,), descontar un día correspondiente al día adicional del año 1900 y contar hacia adelante desde el año CERO.

Sin ir más lejos y dejando la introducción, a continuación está la instrucción para saber la Fecha en función a su día espacio tiempo espacial!.


DECLARE @Fecha AS nvarchar(20)
SET @Fecha = '40466,65778'
SELECT convert(nvarchar,dateadd(day,(cast(substring(@Fecha,1,(CHARINDEX(',',@Fecha)-1)) AS INTEGER)-1),'18991231'),103)

Espero que les sirva y nos vemos en la próxima!

2 comentarios: