2012-03-01 17 views
22

Devo confrontare 2 date e restituire il numero di giorni in mezzo con 2 posizioni decimali.TSQL DateDiff per restituire il numero di giorni con 2 posizioni decimali

Ad esempio:

quando si confrontano

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

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

Questa è una differenza di 5 ore. Quindi mi sento di tornare 0,2 giorni

ho provato:

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

Nessuno sembra funzionare.

risposta

32

Prendere lo DateDiff in pochi secondi e quindi dividere per 86400.0. Il punto decimale è richiesto.

+0

Questa grande opera. C'è un modo per farlo scendere a 2 cifre decimali –

1

Che ne dici di questo.

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

Quando si dichiara una data come un numero, ogni giorno è rappresentato da 1,0 "unità" già. Per ottenere l'intervallo di tempo di due date come decimale, puoi semplicemente sottrarle.

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

Se qualcuno userà questo metodo, credo che vorrai dividere per '365.2425' – daveomcd

+0

@daveomcd Perché? La domanda è chiedere l'intervallo di tempo in giorni, non anni e non credo che il tuo calcolo sarebbe accurato per la maggior parte dei casi, comunque. – JackAce

+0

Le mie scuse mi sono perse la parte dei giorni immagino ... perché non sarebbe corretto per anni? – daveomcd

0

Ecco quello che ho fatto:

ROUND(SUM(DATEDIFF(ss,StartDateTime,EndDateTime)/60.0/60.0), 2) 
Problemi correlati