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