2012-07-10 11 views
8

Mam podstawowe zapytanie:Jak znaleźć liczbę dni między dwiema datami

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

Chcę dodać kolejną kolumnę do wyjścia ... nazwijmy to „Różnica”, aby dowiedzieć się liczby dni między "dtcreated" i "dtlastupdated" Więc na przykład, jeśli rekord 1 ma dtcreated z 1/1/11 i dtlastupdated jest 1/1/12, kolumna "Różnica" będzie "365".

Czy można tego dokonać w zapytaniu?

+2

Googling „Jak znaleźć liczbę dni między dwiema datami zapytania” znaleziono mult uzasadnia odpowiedzi. To właśnie powinieneś najpierw wypróbować. –

+1

@Jeremy, czy nie jest dobrze mieć tu odpowiedź? Google faktycznie właśnie mnie tu sprowadził. –

+0

@AdrianMouat Pamiętaj, że to ponad rok po zadaniu pytania. StackOverflow cieszy się wyższymi wynikami wyszukiwania w Google, więc jest to naturalny wynik ... niezależnie od tego, że nie było to konieczne. –

Odpowiedz

23

byłoby użyć DATEDIFF:

declare @start datetime 
declare @end datetime 

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

select DATEDIFF(d, @start, @end) 

results = 365 

więc na zapytanie:

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

Wystąpił błąd w tym ... Błąd wykonywania SQL Konwersja nie powiodła się podczas konwersji datetime z ciągu znaków – Shmewnix

+0

@ Shmewnix jaki jest typ danych dla 'dtCreated' i' dtLastUpdated'? Jeśli nie są datetime, musisz je przekonwertować. – Taryn

+0

gdzie byś je skonwertował? W instrukcji select? lub w oświadczeniu dotyczącym daty sprzedaży? – Shmewnix

4

Aby znaleźć liczbę dni między dwiema datami, możesz użyć:

DATEDIFF (d, startdate , enddate) 
1

bym użyj funkcji DATE_DIFF, aby podać tę wartość, jak poniżej:

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: W przypadku korzystania z MySQL pominąć 'd' zostawiając

DATEDIFF(dtLastUpdated, dtCreated) AS Difference 
1

Jeśli używasz MySQL istnieje funkcja DateDiff który obliczyć dni pomiędzy dwiema datami:

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') 

zrobić

Powiązane problemy