2013-03-13 12 views

Odpowiedz

40

3 miesiące przed dniem dzisiejszym:

select * from table where timestamp >= now()-interval 3 month; 

start z pierwszego z miesiąca:

select * from table where timestamp >= last_day(now()) + interval 1 day - interval 3 month; 
+1

@StephenKloder: Proszę wyjaśnić zapytanie? Oto, jaki jest pożytek z 'interval 1 day'? – kreya

1

Zakładając, że używasz serwera SQL (Oracle, MySQL i inni mają podobne funkcje data), można użyj funkcji dateadd, aby dodać lub odjąć interwał do bieżącej daty.

Jeśli chcesz pełne trzy miesiące, można odjąć 3 miesiące od dzisiaj: DATEADD(m,-3,getdate())

Ale, jak to stwierdzić, wystarczy tylko chcieć danych ze stycznia, lutego i marca. Trzeba dokonać pewnych obliczeń w oparciu o dniu dzisiejszym: dateadd(m,-2, CONVERT(datetime, CONVERT(VARCHAR(2), MONTH(getdate())) + '/01/' + CONVERT(VARCHAR(4), YEAR(getdate()))))

I w końcu dostać zapytanie jak

SELECT fields 
FROM table 
WHERE timestampfield > DATEADD(m,-2, CONVERT(datetime, CONVERT(VARCHAR(2), MONTH(getdate())) + '/01/' + CONVERT(VARCHAR(4), YEAR(getdate())))) 

--- edit --- ERF, właśnie zauważyłem "mysql" tag ... można uzyskać więcej informacji na temat aktualnych funkcji MySQL tutaj: https://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html

7

zdobyć pierwszy dzień bieżącego miesiąca, można użyć to:

DATE_FORMAT(CURDATE(), '%Y-%m-01') 

, jeśli bieżąca data to 2013-03-13, zwróci 2013-03-01, a my możemy odjąć 2 miesiące od tej daty, aby uzyskać 2013-01-01. Zapytanie może być tak:

SELECT * 
FROM yourtable 
WHERE data >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 2 MONTH 
1

wiem, jest to stara sprawa, ale może ratować innych czas i podsumować powyższe odpowiedzi aż do przypadku konieczności (1) pochodzi z bieżącego miesiąca (2) pochodzi z wcześniejszych 2 miesięcy (często używanych przy wyświetlaniu statystyk danych):

WHERE ((timestamp >= NOW() - DATE_FORMAT(CURDATE(), '%Y-%m-01')) 
OR (timestamp >= DATE_FORMAT(CURDATE(), '%Y-%m-01') - INTERVAL 2 MONTH)) 
Powiązane problemy