gpt4 book ai didi

postgresql - Postgres : Is Date between now and interval for EVERY birthday

转载 作者:行者123 更新时间:2023-11-29 12:52:23 24 4
gpt4 key购买 nike

我希望能够返回从现在到指定时间间隔的生日的用户。

用户模型

  • 姓名(字符串)
  • 生日(日期)

我的时间间隔 = 30 天

我的数据集

|---------------------|------------------|------------------|
| id | name | birthday |
|---------------------|------------------|------------------|
| 1 | Tim | 27/06/1994 |
|---------------------|------------------|------------------|

我的尝试

SELECT * FROM User where User.birthday BETWEEN NOW()::timestamp AND to_char(NOW() + interval '30 days','MM-DD')::timestamp;

返回

空的。 Postgres 假设省略年份实际上是指第 1 年。

我想要什么

此查询返回生日在区间内的所有用户,与年份无关。

尝试回答(非常感谢@Mureinik)

SELECT *
FROM user
WHERE birthday BETWEEN TO_CHAR(NOW(), 'MM-DD') AND
TO_CHAR(NOW() + INTERVAL '30 days','MM-DD')

这个答案有问题

  • 如果 30 天后是明年,这将不起作用。
  • 如果年份是闰年,这个间隔不需要是 31 天吗?

最佳答案

我根据当前年份和用户的生日月日生成了一个新日期,然后查看它是否在接下来的 30 天内。

select *
from user
where date(date_part('year', current_date)||'-'||date_part('month', birthday)||'-'||date_part('day', birthday))
between current_date and current_date + interval '30 days';

例如:

# select * from user;
id | name | birthday
----+-------+------------
1 | Tim | 1994-06-27
2 | Steve | 1982-06-23
3 | Dave | 1980-07-29
(3 rows)

# select *
from user
where date(date_part('year', current_date)||'-'||date_part('month', birthday)||'-'||date_part('day', birthday))
between current_date and current_date + interval '30 days';
id | name | birthday
----+-------+------------
1 | Tim | 1994-06-27
2 | Steve | 1982-06-23
(2 rows)

关于postgresql - Postgres : Is Date between now and interval for EVERY birthday,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50841205/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com