PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak obliczyć następne urodziny biorąc pod uwagę datę urodzenia?

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'

Wyrażenie (extract(year from age(birth_date)) + 1) * interval '1' year oblicza wiek następnych urodzin w (pełnych) latach. Dodając to do daty urodzenia, daje to następne urodziny.

Rzut jest niezbędny, aby uzyskać prawdziwą date z powrotem, ponieważ date + interval zwraca znacznik czasu (w tym godzinę).

Jeśli usuniesz where warunek, otrzymasz wszystkie „następne” urodziny.

Listę nadchodzących urodzin możesz też otrzymać m.in. przez następne 30 dni używając czegoś takiego:

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. Jak uzyskać asynchroniczną / sterowaną zdarzeniami obsługę LISTEN/NOTIFY w Javie przy użyciu bazy danych Postgres?

  2. PostgreSQL Brak funkcji automatycznego przyrostu?

  3. Jak w Postgresie mam LICZYĆ i GDZIE w tym samym zapytaniu, a następnie wykonać obliczenia matematyczne na wyniku?

  4. Kiedy trzeba uruchomić REINDEX w postgresie

  5. String -> java.util.Date -> java.sql.Date (ze znacznikiem czasu)