Dato questo schema in un database Postgres:Come calcolare il prossimo compleanno data una data di nascita?
CREATE TABLE person (
id serial PRIMARY KEY,
name text,
birth_date date,
);
Come dovrei interrogare il tavolo per ottenere la data di prossimo compleanno di ogni persona dopo oggi?
Ad esempio se Bob's birth_date
è il 2000-06-01, il suo prossimo compleanno sarà il 2016-06-01.
Nota: non sto cercando il birth_date
+ un predefinito interval
ma piuttosto il prossimo anniversario della nascita di una persona.
ho scritto l'equivalente in Python:
def next_birthday(self):
today = datetime.date.today()
next_birthday = self.birth_date.replace(year=today.year)
if next_birthday < today:
next_birthday = next_birthday.replace(year=today.year + 1)
return next_birthday
Tuttavia mi piacerebbe vedere se Postgres può fare questo in modo più performante.
@PetrHejda - quella risposta seleziona i compleanni in un dato intervallo di date (1 settimana da oggi). Sto cercando di ottenere il prossimo anniversario del compleanno di ogni persona. – ghickman
@Simile: quella risposta filtra le righe, mentre sto cercando di calcolare il prossimo compleanno imminente per ogni persona. – ghickman
E il 29 febbraio, cosa dovrebbe restituire? Se non c'è il 29 febbraio l'anno prossimo, dovrebbe tornare il 28 febbraio, 1 marzo o il prossimo 29 febbraio? – Peter