2012-06-18 17 views
10

Mam poniżej kwerendy w bazie danych PostgreSQLPierwszy dzień bieżącego roku

SELECT * 
FROM accounts 
where insertdate BETWEEN '2012-01-01' AND CURRENT_TIMESTAMP 

Więc jak mogę wymienić '2012-01-01' prośbą o pierwszym dniu bieżącego roku

Jest jeszcze jedna kwestia. Kiedy mam nowy rekord w tabeli konta, w tej samej chwili działa powyższy wybór, więc nie przyniesie mi to, co właśnie zrobiłem. Czy to rozsądne? Jaki jest najlepszy sposób, aby go wyprzedzić?

+1

"YYYY-01-01" jest zawsze pierwszym dniem roku ... –

Odpowiedz

23

Szukacie date_trunc(), co może skrócić termin do określonej dokładności (np year, month, day):

SELECT date_trunc('year', now()); 

w zapytaniu:

SELECT * FROM accounts where insertdate BETWEEN 
date_trunc('year', now()) AND CURRENT_TIMESTAMP 
+0

To było idealne, ale mam jeszcze jeden problem. Kiedy mam nowy rekord w tabeli konta, ta sama chwila uruchamia powyższy wybór, więc nie przynosi mi tego, co właśnie nagrałem ... Jaki jest najlepszy sposób, aby go wyprzedzić? – user1392203

+0

Jeśli operacje występują w oddzielnych transakcjach, zapytanie powinno znaleźć nowy rekord zaraz po zatwierdzeniu transakcji wstawiania. Jeśli są w tej samej transakcji, wystarczy uruchomić kwerendy we właściwej kolejności. – beerbajay

+0

czy istnieje sposób na dodanie "bieżącego dnia 23:59:59"? coś jak "2012-6-19 23:59:59" – user1392203

1

można spróbować i użyj tego CURRENT_TIMESTAMP.YEAR-01-01

Powiązane problemy