2013-08-02 3 views
0

моя пользовательская таблица выглядит следующим образом:Получить день рождения больше, чем текущая дата

  1. birhtMonth: INT
  2. dayOfBirthday: Int
  3. HireDate: Дата

ТРЕБОВАНИЕ: я хочу получить все предстоящие дни рождения и даты найма (день месяца/месяца исключается здесь) в следующие 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") 

это становится все запланированные дни рождения & нанять даты в течение следующих шести месяцев, но он получает дни рождения & даты аренды в месяц в течение нескольких дней, прежде чем & после текущего дня, и он должен получить только результаты> текущий день и проигнорировать результаты < текущий день в этом месяце.

Пример:

  • текущая дата 8/3/2013, если есть день рождения с birthMonth = 8 и dayOfBirth = 3 или 2 или 1 его следует игнорировать только dayOfBirth> 3 в текущем месяце считается также, если есть hirDate как:

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

они должны быть проигнорированы тоже, пожалуйста, посоветуйте, как решить эту проблему в SQL или HQL.

+0

Ответ зависит от механизма базы данных. Пожалуйста, укажите ваше. –

+0

I 2nd это. Функции даты очень разные между двигателями, и это то, с чем мы будем работать. –

ответ

1

Ваш hireDate имеет тип Date, поэтому использовать сравнение дат и использовать между такими как:

(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 (-что вы хотите увеличивать, - как много хотите увеличивать-, -date to add to-).