2012-03-01 7 views
22

Necesito comparar 2 fechas y devolver el número de días entre 2 decimales.TSQL DateDiff para devolver el número de días con 2 posiciones decimales

Por ejemplo:

al comparar

SubmittedDate = 2012-02-29 07:02:55.000 

FirstCall = 2012-02-29 12:12:19.000 

Esa es una diferencia 5 horas. Así que volvería 0,2 días

He tratado:

CAST(DATEDIFF(Hour, SubmittedDate, FirstCall)/30.0 AS DECIMAL(5,2)) As HoursBeforeFirstCall 
CAST(DATEDIFF(Day, SubmittedDate, FirstCall) AS DECIMAL(5,2)) As HoursBeforeFirstCall 

ninguno parece funcionar.

Respuesta

32

En su lugar, tome DateDiff y luego divida por 86400.0. El punto decimal es obligatorio.

+0

Esto funciona muy bien. ¿Hay alguna manera de bajarlo a 2 decimales? –

1

Qué tal esto.

select convert(decimal(12,2),convert(decimal(12,2),datediff(second,'2012-02-29 07:02:55.000','2012-02-29 12:12:19.000'))/60/60/24) 
3

Cuando representa una fecha como un número, cada día está representado por 1.0 "unidades" ya. Para obtener el intervalo de tiempo de dos fechas como un decimal, puede restarlas.

SELECT CAST((@FirstCall - @SubmittedDate) AS NUMERIC(10, 2)) 
+0

Si alguien va a utilizar este método, creo que le gustaría dividir por '365.2425' – daveomcd

+0

@daveomcd ¿Por qué? La pregunta es preguntar por el lapso de tiempo en días, no años, y no creo que tu cálculo sea exacto para la mayoría de los casos, de todos modos. – JackAce

+0

Mis disculpas se perdieron la parte de los días, supongo ... ¿por qué no sería correcto durante años? – daveomcd

0

Esto es lo que he hecho:

ROUND(SUM(DATEDIFF(ss,StartDateTime,EndDateTime)/60.0/60.0), 2) 
Cuestiones relacionadas