2012-07-10 20 views
8

Ho una domanda di base:Come trovare il numero di giorni tra due date

SELECT dtCreated 
    , bActive 
    , dtLastPaymentAttempt 
    , dtLastUpdated 
    , dtLastVisit 
FROM Customers 
WHERE (bActive = 'true') 
    AND (dtLastUpdated > CONVERT(DATETIME, '2012-01-0100:00:00', 102)) 

Voglio aggiungere un'altra colonna all'uscita ... consente di chiamare "Differenza" per scoprire il numero di giorni tra 'dtcreated' e 'dtlastupdated' Quindi per esempio se il record 1 ha un dtcreated di 1/1/11 e dtlastupdated è 1/1/12 la colonna "Difference" sarebbe "365".

Questo può essere realizzato in una query?

+2

usare Google "Come trovare il numero di giorni tra due date di query" trovato mult itudes di risposte. Questo è quello che dovresti provare prima. –

+1

@Jeremy, non è bello avere una risposta qui? Google infatti mi ha appena portato qui. –

+0

@AdrianMouat tieni presente che è passato più di un anno dalla domanda. StackOverflow gode dei risultati di ricerca con ranking più alto su Google, quindi questo è un risultato naturale ... indipendentemente dal fatto che non fosse necessario. –

risposta

23

usereste DATEDIFF:

declare @start datetime 
declare @end datetime 

set @start = '2011-01-01' 
set @end = '2012-01-01' 

select DATEDIFF(d, @start, @end) 

results = 365 

così per la query:

SELECT dtCreated 
    , bActive 
    , dtLastPaymentAttempt 
    , dtLastUpdated 
    , dtLastVisit 
    , DATEDIFF(d, dtCreated, dtLastUpdated) as Difference 
FROM Customers 
WHERE (bActive = 'true') 
    AND (dtLastUpdated > CONVERT(DATETIME, '2012-01-0100:00:00', 102)) 
+0

Viene visualizzato un messaggio di errore ... Conversione errore di esecuzione SQL non riuscita durante la conversione di datetime dalla stringa di caratteri – Shmewnix

+0

@Shmewnix qual è il tipo di dati per 'dtCreated' e' dtLastUpdated'? Se non sono datetime, sarà necessario convertirli. – Taryn

+0

dove vorresti convertirli? Nell'istruzione select? o nella dichiarazione datata? – Shmewnix

4

Per trovare il numero di giorni tra due date, si utilizza:

DATEDIFF (d, startdate , enddate) 
1

lo farei utilizzare la funzione DATE_DIFF per fornire questo valore come riportato di seguito:

SELECT dtCreated 
    , bActive 
    , dtLastPaymentAttempt 
    , dtLastUpdated 
    , dtLastVisit 
    , DATEDIFF(d, dtLastUpdated, dtCreated) AS Difference 
FROM Customers 
WHERE (bActive = 'true') 
    AND (dtLastUpdated > CONVERT(DATETIME, '2012-01-0100:00:00', 102)) 

EDIT: Se si utilizza MySQL si omette la 'd' lasciandovi con

DATEDIFF(dtLastUpdated, dtCreated) AS Difference 
1

Se si utilizza MySQL v'è la funzione di DATEDIFF che calcolano i giorni tra due date:

SELECT dtCreated 
    , bActive 
    , dtLastPaymentAttempt 
    , dtLastUpdated 
    , dtLastVisit 
    , DATEDIFF(dtLastUpdated, dtCreated) as Difference 
FROM Customers 
WHERE (bActive = 'true') 
    AND (dtLastUpdated > CONVERT(DATETIME, '2012-01-0100:00:00', 102)) 
0
DATEDIFF(d, 'Start Date', 'End Date') 

fanno

Problemi correlati