我希望能够返回从现在到指定时间间隔之间有生日的用户。
用户模型
名称(字符串)
生日(日期)
我的时间间隔=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假设省略年份实际上是指第一年。
我想要什么
此查询返回其生日在间隔内的所有用户,而不考虑年份。
试着回答(非常感谢@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:是从现在到每个生日间隔的日期,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50841205/