我希望能够返回用户谁有一个生日从现在到指定的时间间隔。
用户模型
- name(string)
- 生日(日期)
我的时间间隔= 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天?
4条答案
按热度按时间gupuwyp21#
我根据当前的年份和用户的生日月份和日期生成了一个新的日期,然后看看它是否在未来30天内。
例如:
6psbrbz92#
您可以将
between
的两个参数都转换为字符串并使用字典比较。由于格式是固定宽度的,因此应该可以:62lalag43#
这里,我在我的项目中实现了QueryDsl支持:
r8xiu3jd4#
不是100%相同,但是如果你只需要计算到下一个周年纪念日的天数,并且你可以忽略闰年,你可以使用年份的日期(
DOY
)和模函数来做一些数学运算。例如这是通过将它们之间的差加365而使其为正数和未来值,然后删除任何多余的内容,以使用模来获得余数。