繁体   English   中英

在休眠查询中提供条件以获取起始日期为上个月日期的值,即当前月份减去1

[英]Giving criteria in hibernate query to get values having start date as previous month's date i.e current month minus 1

在休眠查询中提供条件以获取起始日期为上个月日期(即当前月份减去1)的值。

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

这是查询。.从PaymentInSlipDO pis,InwardDO inw,InwardPaySlipMapDO映射中选择任何内容,其中map.inwardSeq = inw.id
和map.parentGuidObj = pis.id和pis.paySlipStatus <>“已取消”和pis.paySlipDt <=(这是我被困的地方)

显然,减去30天并不是这样做的正确方法,因为您可能会在同一个月结束(如果您是在本月的31日),或者可能要倒退两个月(如果日期是3月1日,因为2月只有28天)。

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

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

尝试使用日历:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM