PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm thế nào để tính ngày sinh tiếp theo cho một ngày sinh?

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'

Biểu thức (extract(year from age(birth_date)) + 1) * interval '1' year tính tuổi vào sinh nhật tiếp theo trong (đầy đủ) năm. Khi thêm ngày đó vào ngày sinh, điều này sẽ sinh ra ngày sinh tiếp theo.

Diễn viên là cần thiết để có được một date thực quay lại, vì date + interval trả về dấu thời gian (bao gồm cả thời gian).

Nếu bạn xóa where điều kiện, bạn sẽ nhận được tất cả các sinh nhật "tiếp theo".

Bạn cũng có thể nhận danh sách các sinh nhật sắp tới trong ví dụ:30 ngày tiếp theo bằng cách sử dụng một cái gì đó như thế này:

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. chuyển đổi bất kỳ chuỗi ngày nào thành dấu thời gian không có múi giờ

  2. PostgreSQL:Hiển thị các bảng trong PostgreSQL

  3. Array of Enum trong Postgres với SQLAlchemy

  4. Bảng sắp xếp SQL dựa trên hai trường có thể hoán đổi cho nhau

  5. Làm cách nào để chèn giá trị 'NULL' vào cơ sở dữ liệu PostgreSQL bằng Python?