Задание критериев в запросе гибернации для получения значений, имеющих дату начала как дату предыдущего месяца, т.е. текущий месяц минус 1 - PullRequest
1 голос
/ 18 апреля 2011

Задание критериев в запросе гибернации для получения значений, имеющих дату начала как дату предыдущего месяца, т.е. текущий месяц минус 1.

У меня есть таблица в базе данных с полем даты. Я хочу написать запрос гибернации, в котором я получу значения из этой таблицы, дата которой попадает в диапазон: - текущая дата до 30 дней минус текущая дата.

Вот запрос .. выберите все, что угодно, из Pis PaymentInSlipDO, карты InwardDO, карты InwardPaySlipMapDO, где map.inwardSeq = inw.id
и map.parentGuidObj = pis.id и pis.paySlipStatus <> 'ОТМЕНЕНО' и pis.paySlipDt <= (ЭТО ТАМ, ГДЕ Я НАСТРОЕН) </p>

Ответы [ 2 ]

0 голосов
/ 18 апреля 2011

Попробуйте использовать Календарь:

final String queryStr = 
      "select whatever whatever " +
      "from PaymentInSlipDO pis, InwardDO inw, InwardPaySlipMapDO map " +
      "where map.inwardSeq = inw.id " +
      "and map.parentGuidObj = pis.id and pis.paySlipStatus<>'CANCELLED' " +
      "and pis.paySlipDt<= :date";

Calendar c = Calendar.getInstance();
c.setTime(date);
c.add(Calendar.MONTH, -1);

query.setParameter("date", c.getTime());
0 голосов
/ 18 апреля 2011

Очевидно, что вычитание 30 дней не является правильным способом сделать это, так как вы можете получить один и тот же месяц (если вы были 31-го числа текущего месяца) или в конечном итоге вернуться на два месяца назад (если дата была1 марта, потому что в феврале только 28 дней.

Лучшее решение - использовать функцию DATEADD или ADDDATE , поскольку она может использовать определенные единицы измерения даты, например минуты,часы, дни, месяцы, годы и так далее.Просто используйте минус вместо плюса, чтобы вернуться назад.Большинство баз данных имеют функцию DATEADD, но их параметры могут различаться, поэтому проверьте документацию.

Другой вариант - использовать функцию DATEPART , чтобы получить часть месяца и проанализировать ее как целое число перед сравнением.это по мере необходимости.Опять же, не вычитайте один месяц, иначе у вас будут проблемы в следующем январе!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...