sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur beräknar man nästa födelsedag givet ett födelsedatum?

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'

Uttrycket (extract(year from age(birth_date)) + 1) * interval '1' year beräknar åldern vid nästa födelsedag i (fullständiga) år. När du lägger till det till födelsedatumet ger detta nästa födelsedag.

Rollbesättningen är nödvändig för att få ett riktigt date tillbaka, eftersom date + interval returnerar en tidsstämpel (inklusive en tid).

Om du tar bort where skick får du alla "nästa" födelsedagar.

Du kan även få en lista över de kommande födelsedagarna i t.ex. de kommande 30 dagarna med något i stil med detta:

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. Fix Msg 8117 "Operand data type varchar är ogiltig för sumoperator" i SQL Server

  2. Hur man naturligt sammanfogar de två frågorna som har med klausul?

  3. Hur ansluter man R med MySQL eller hur man installerar RMySQL-paketet?

  4. Förhindra intilliggande/överlappande poster med EXCLUDE i PostgreSQL