在休眠查询中给出标准,以获得具有开始日期作为上个月日期的值,即当前月减去1

时间:2011-04-18 10:44:25

标签: java hibernate

在休眠查询中给出标准,以获取具有上个月日期的开始日期的值,即当前月份减去1。

我在数据库中有一个有日期字段的表。 我想写一个hibernate查询,我将从该表中获取其日期在以下范围内的值: - 当前日期为30天减去当前日期。

这是查询.. 从PaymentInSlipDO pis,InwardDO inw,InwardPaySlipMapDO map中选择任何内容,其中map.inwardSeq = inw.id
和map.parentGuidObj = pis.id 和pis.paySlipStatus<>'取消' 和pis.paySlipDt< =(这就是我被诅咒)

2 个答案:

答案 0 :(得分:0)

显然,减去30天不是正确的方法,因为你可能会在同一个月结束(如果你是在当月的第31个月)或最终回到两个月(如果日期是3月1日,因为二月只有28天)。

最佳解决方案是使用DATEADDADDDATE功能,因为它可以使用特定的日期单位,如分钟,小时,天,月,年等。只需使用减去而不是加号来向后退。大多数数据库都有DATEADD函数,但它们的参数可能会有所不同,因此请查看您的文档。

另一种选择是使用DATEPART函数获取月份部分并将其解析为整数,然后根据需要进行比较。再说一次,不要只减去一个月,否则你明年1月就会遇到问题!

答案 1 :(得分:0)

尝试使用日历:

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());