Tengo que calcular la diferencia en horas (tipo decimal) entre dos fechas en SQL Server 2008.
No pude encontrar ninguna técnica útil para convertir la fecha y la hora a decimal con 'CONVERT' en MSDN.
¿Alguien me puede ayudar con eso?
ACTUALIZACIÓN:
Para ser claros, también necesito la parte fraccionaria (por lo tanto, tipo decimal). Así que de 9:00 a 10:30 debería devolverme 1.5.
sql-server
tsql
datetime
decimal
Bagazo
fuente
fuente
datepart
pasado aDATEDIFF
controlará la resolución de la salida. Por ejemplo, sistart_date
yend_date
difiere en 59 segundos,DATEDIFF(MINUTE, start_date, end_date) / 60.0
devolvería 0, peroDATEDIFF(second, start_date, end_date) / 3600.0
devolvería 0,0163888 (59/3600).DATEDIFF
una resolución superior a una hora) funciona. Por ejemplo,SELECT DATEDIFF(second, DATEADD(minute, -15, GETUTCDATE()), GETUTCDATE()) / 3600.0
devuelve 0,250000.Simplemente reste los dos valores de fecha y hora y multiplíquelos por 24:
Select Cast((@DateTime2 - @DateTime1) as Float) * 24.0
un script de prueba podría ser:
Declare @Dt1 dateTime Set @Dt1 = '12 Jan 2009 11:34:12' Declare @Dt2 dateTime Set @Dt2 = getdate() Select Cast((@Dt2 - @Dt1) as Float) * 24.0
Esto funciona porque todas las fechas y horas se almacenan internamente como un par de números enteros, el primer número entero es el número de días desde el 1 de enero de 1900 y el segundo número entero (que representa el tiempo) es el número de ( 1 ) tics desde la medianoche. (Para SmallDatetimes, el entero de la porción de tiempo es el número de minutos desde la medianoche). Cualquier aritmética realizada con los valores usa la porción de tiempo como una fracción de un día. 6 am = 0.25, mediodía = 0.5, etc ... Vea el enlace de MSDN aquí para obtener más detalles.
Entonces Cast ((@ Dt2 - @ Dt1) as Float) le da el total de días entre dos fechas. Multiplica por 24 para convertir a horas. Si necesita minutos totales, múltiples por minutos por día (24 * 60 = 1440) en lugar de 24 ...
NOTA 1 : Esto no es lo mismo que una marca de dotNet o javaScript; esta marca es de aproximadamente 3,33 milisegundos.
fuente
DATEDIFF pero tenga en cuenta que devuelve un número entero, por lo que si necesita fracciones de horas, use algo como esto:
fuente
Usando Postgres tuve problemas con DATEDIFF, pero tuve éxito con esto:
que me dio una salida como "14.3"
fuente
Declare @date1 datetime Declare @date2 datetime Set @date1 = '11/20/2009 11:00:00 AM' Set @date2 = '11/20/2009 12:00:00 PM' Select Cast(DateDiff(hh, @date1, @date2) as decimal(3,2)) as HoursApart
Resultado = 1,00
fuente
Probablemente esté buscando la función DATEDIFF .
Donde su código podría verse así:
DATEDIFF (hh, fecha de inicio, fecha de finalización)
fuente
O use esto para 2 lugares decimales:
fuente
SELECCIONE DATEDIFF (hh, firstDate, secondDate) FROM tableName DONDE ...
fuente