sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvordan beregner man næste fødselsdag givet en fødselsdato?

select birth_date,
       cast(birth_date + ((extract(year from age(birth_date)) + 1) * interval '1' year) as date) as next_birthday
from person
where name = 'Bob'

Udtrykket (extract(year from age(birth_date)) + 1) * interval '1' year beregner alderen ved næste fødselsdag i (hele) år. Når du tilføjer det til fødselsdatoen, giver dette den næste fødselsdag.

Rollebesætningen er nødvendig for at få en rigtig date tilbage, fordi date + interval returnerer et tidsstempel (inklusive et tidspunkt).

Hvis du fjerner where tilstand, får du alle "næste" fødselsdage.

Du kan også få en liste over de kommende fødselsdage i f.eks. de næste 30 dage ved at bruge noget som dette:

select next_birthday,
       next_birthday - current_date as days_until_next
from (
  select birth_date,
         cast(birth_date + ((extract(year from age(birth_date)) + 1) * interval '1' year) as date) as next_birthday
  from person
) as upcoming
where upcoming.next_birthday <= current_date + 30
order by next_birthday;


  1. Brug af et SQL-resultat i en foreach loop

  2. Kan ikke oprette en forekomst af OLE DB-udbyderfejl som Windows-godkendelsesbruger

  3. Hvordan håndterer man MySQL's udenlandske nøglefejl i Php?

  4. Forbindelsen blev lukket midt i driften, da du fik adgang til databasen ved hjælp af Python