2013-08-02 22 views
0

我的用戶表如下:獲取生日比當前日期更大

  1. birhtMonth:整數
  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解決這個問題。

+0

答案取決於數據庫引擎。請說明你的。 –

+0

我第二。日期函數在引擎之間非常不同,這就是我們將要使用的。 –

回答

1

hireDateDate型的,所以使用日期比較之間使用,如:

(hireDate between :toDayParam and :sixMonthLaterParam) 

的生日,你可以用lpad(birthMonth, 2, 0) + lpad(birthDate, 2, 0)比較,但你應該關心約六月份是否以後是在明年或當年。

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的工作原理如下DATEADD( - 你想增加的數量, - 你想增加多少, - 增加一個日期)。