Sql 获取大于当前日期的生日

Sql 获取大于当前日期的生日,sql,hibernate,jpa,hql,Sql,Hibernate,Jpa,Hql,我的用户表如下: birtmonth:int 出生日期:int 雇佣日期 要求:我希望在接下来的6个月内获得所有即将到来的生日和雇佣日期(此处不包括日期/月份),考虑到当前月份的日期应该大于今天,所以我做了以下工作: @Query("from User u where ( (u.birthMonth in (8,9,10,11,12,1)) or (month(u.hireDate) in (8,9,10,11,12,1)) ) and u.company = :company") 这将获取未

我的用户表如下:

  • birtmonth:int
  • 出生日期:int
  • 雇佣日期
  • 要求:我希望在接下来的6个月内获得所有即将到来的生日和雇佣日期(此处不包括日期/月份),考虑到当前月份的日期应该大于今天,所以我做了以下工作:

    @Query("from User u where ( (u.birthMonth in (8,9,10,11,12,1)) or (month(u.hireDate) in (8,9,10,11,12,1)) ) and u.company = :company")
    
    这将获取未来六个月内所有即将到来的生日和雇佣日期,但它将获取本月当前日期之前和之后的生日和雇佣日期,并且它应该只获取结果>当前日期,而忽略结果<本月的当前日期

    示例:

    • 今天的日期是2013年8月3日,如果生日的生日月份为8,出生日期为3或2或1,则应忽略该日期,仅考虑当前月份的出生日期>3,并且如果存在如下日期:

      • 2011-08-01
      • 2012-08-02
      • 2012-08-03

    它们也应该被忽略,请建议如何在sql或hql中解决此问题。

    我想您正在寻找日期函数。他们可以在这里帮你很大的忙。特别是DATEADD函数。看看我在这里写的代码

    SELECT * FROM dbo.product 
    WHERE dbo.product.stockDate > GETDATE()
    AND dbo.product.stockDate < GETDATE() + DATEADD(month, 6, dbo.product.stockDate)
    AND dbo.product.expirationDate > GETDATE()
    AND dbo.product.expirationDate < GETDATE() + DATEADD(month, 6, dbo.product.expirationDate)
    
    从dbo.product中选择*
    其中dbo.product.stockDate>GETDATE()
    和dbo.product.stockDateGETDATE()
    和dbo.product.expirationDate

    这将保证stockDate和expirationDate大于当前日期,小于当前日期+6个月。DATEADD的工作方式如下DATEADD(-what you want increment by-,-how you want increment-,-date to add-)

    您的
    hireDate
    类型为
    Date
    ,因此请使用日期比较,并在以下各项之间使用:

    (hireDate between :toDayParam and :sixMonthLaterParam)
    

    对于birthDate,您可以与lpad(birthMonth,2,0)+lpad(birthDate,2,0)
    进行比较,但您应该关心六个月后是在明年还是在今年。

    答案取决于数据库引擎。请具体说明你的,我同意。发动机之间的日期函数非常不同,这就是我们将使用的。