簡體   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