【问题标题】:Get birthday greater than current date获取大于当前日期的生日
【发布时间】:2013-08-04 07:40:57
【问题描述】:

我的用户表如下:

  1. birhtMonth: int
  2. dayOfBirthday: int
  3. 入职日期:日期

要求:我想获得未来 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 日,如果有birthMonth=8 和 dayOfBirth=3 或 2 或 1 的生日,则应忽略它,只考虑当月的 dayOfBirth > 3,如果有类似 hirDate 的情况:

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

它们也应该被忽略,请告知如何在 sql 或 hql 中解决这个问题。

【问题讨论】:

  • 答案取决于数据库引擎。请指定您的。
  • 我是第二个。引擎之间的日期函数非常不同,这就是我们将使用的。

标签: sql hibernate jpa hql


【解决方案1】:

您的hireDateDate 类型,因此请使用日期比较和使用,例如:

(hireDate between :toDayParam and :sixMonthLaterParam)

birthDate,你可以和lpad(birthMonth, 2, 0) + lpad(birthDate, 2, 0)比较,但你要关心六个月后是明年还是当年。

【讨论】:

    【解决方案2】:

    我认为您正在寻找 DATE 函数。他们可以在这里为您提供极大的帮助。特别是 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)
    

    这将保证 stockDate 和 expirationDate 大于当前日期且小于当前日期 + 6 个月。 DATEADD 工作方式如下

    【讨论】:

      猜你喜欢
      • 2020-05-29
      • 1970-01-01
      • 2017-01-02
      • 1970-01-01
      • 2021-07-09
      • 1970-01-01
      • 1970-01-01
      • 2023-02-08
      相关资源
      最近更新 更多