如何只按天、月和x天过滤生日?

pnwntuvh  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(209)

给一张table User 使用id、name和birth\ u date,我想过滤从今天起x天内庆祝生日的所有用户,忽略这一年。
例如,如果今天是11月24日,我想让所有从11月24日到27日庆祝生日的用户,不管他们的出生年份是什么。

LocalDate today = ZonedDateTime.now().toLocalDate();
LocalDate endDay = today.plusDays(3);

-------------------------------------
filter from today to endDay

1 | User A | 11/24/1995
2 | User B | 09/02/2000
3 | User C | 11/26/1998
4 | User D | 11/25/2005

在这种情况下,我希望得到用户a,c和d。
我正在尝试使用javajpa@query注解来实现这一点,但是如果有办法在postgresql中实现这一点,也可以。

2nbm6dog

2nbm6dog1#

您可以使用date\u part函数来实现这一点,但是如果您想要的时间段跨越到下个月或下一年,则数学会变得模糊。
如果您通过检查月份和日期来完成,您将需要:
期间何时适合当前月份的查询
查询期间何时适合两个月。
如果您通过检查一年中的哪一天(doy)来代替,那么您就必须担心是否会转移到下一年,还要担心检查的日期是否在闰年,您要查找的日期是否在闰年之后,以及您的应用程序中是否有闰年之后的日期。
最后,您可以使用直接字符串比较,格式如下 to_char(birth_date, 'MM-DD') . 同样的,你需要两个查询来确定你的最后一次约会是什么时候进入下一年的。这个 between 支票包括在内。

... where to_char(birth_date, 'MM-DD') BETWEEN '11-28' AND '12-01'

... where to_char(birth_date, 'MM-DD') BETWEEN '12-29' AND '12-31'
OR to_char(birth_date, 'MM-DD') BETWEEN '01-01' AND '01-02'

相关问题