PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да изчислим следващия рожден ден, като имаме предвид датата на раждане?

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'

Изразът (extract(year from age(birth_date)) + 1) * interval '1' year изчислява възрастта на следващия рожден ден в (пълни) години. Когато добавите това към датата на раждане, това дава следващия рожден ден.

Актьорският състав е необходим, за да получите истинска date назад, защото date + interval връща клеймо за време (включително време).

Ако премахнете where условие, ще получите всички "следващи" рождени дни.

Можете също така да получите списък с предстоящите рождени дни напр. следващите 30 дни, използвайки нещо подобно:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. sqlalchemy postgresql е нулев индекс

  2. Как да генерирам списък с месеци в PostgreSQL?

  3. Ефективно ГРУПИРАНЕ ПО СЛУЧАЙ израз в Amazon Redshift/PostgreSQL

  4. PostgreSQL denescape JSON низ

  5. Django с Postgresql, колоната трябва да се появи в клаузата GROUP BY или да се използва в обобщена функция