我的用户表格如下:
要求:我希望在接下来的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,则只应忽略dayOfBirth>考虑当前月份中的3个,如果有hirDate就像:
它们也应该被忽略,请告知如何在sql或hql中解决这个问题。
答案 0 :(得分:1)
您的hireDate
类型为Date
,因此请使用日期比较,并在以下情况之间使用:
(hireDate between :toDayParam and :sixMonthLaterParam)
对于birthDate,您可以与lpad(birthMonth, 2, 0) + lpad(birthDate, 2, 0)
进行比较,但是您应该关心六个月后是明年还是当年。
答案 1 :(得分: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 mo。 DATEADD的工作方式如下:DATEADD( - 你想要增加 - 你想要增加多少 - , - 添加到 - 的日期)。