0

我的用户表如下:

  1. 出生月份:int
  2. dayOfBirthday: 整数
  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 中解决这个问题。

4

2 回答 2

1

hireDate的类型为Date,因此请使用日期比较和使用,例如:

(hireDate between :toDayParam and :sixMonthLaterParam)

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

于 2013-08-03T00:08:12.130 回答
0

我认为您正在寻找 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 工作方式如下

于 2013-08-02T23:06:37.773 回答