在休眠查询中给出标准,以获取具有上个月日期的开始日期的值,即当前月份减去1。
我在数据库中有一个有日期字段的表。 我想写一个hibernate查询,我将从该表中获取其日期在以下范围内的值: - 当前日期为30天减去当前日期。
这是查询..
从PaymentInSlipDO pis,InwardDO inw,InwardPaySlipMapDO map中选择任何内容,其中map.inwardSeq = inw.id
和map.parentGuidObj = pis.id
和pis.paySlipStatus<>'取消'
和pis.paySlipDt< =(这就是我被诅咒)
答案 0 :(得分:0)
显然,减去30天不是正确的方法,因为你可能会在同一个月结束(如果你是在当月的第31个月)或最终回到两个月(如果日期是3月1日,因为二月只有28天)。
最佳解决方案是使用DATEADD或ADDDATE功能,因为它可以使用特定的日期单位,如分钟,小时,天,月,年等。只需使用减去而不是加号来向后退。大多数数据库都有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());