灵活搜索查询中的日期减法
Date subtraction in FlexibleSerchQuery
我正在尝试编写一个 FlexibleSearchQuery 来查找连接到 hsqldb 数据库的 hybris 中超过 30 天的记录,但下面的代码抛出
org.hsqldb.HsqlException: incompatible data types in combination
查询:
final FlexibleSearchQuery flexibleSearchQuery = new FlexibleSearchQuery("
SELECT * FROM CUSTOMER AS c WHERE c.timestamp < TRUNC(SYSDATE) - 30")
有人可以就如何解决此问题提出建议吗?
我宁愿像这样将 java.util.Date
对象传递给灵活查询
//Import statement
import java.util.Calendar;
import java.util.Date;
import org.apache.commons.lang.time.DateUtils;
//Flexible search query
final FlexibleSearchQuery flexibleSearchQuery = new FlexibleSearchQuery(" SELECT * FROM CUSTOMER AS c WHERE c.timestamp < ?days")
flexibleSearchQuery.addQueryParameter("days", substractDaysFromDate(30));
flexibleSearchService.search(flexibleSearchQuery);
//method to get date difference
private Date subtractDaysFromCurrentDate(int days)
{
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -days);
cal = DateUtils.truncate(cal, Calendar.DATE);
return cal.getTime();
}
+1 到 HybrisHelp 答案。您应该计算日期并将其传递给灵活查询。
使用 Java 8 次 api 的相同版本的较短版本。
final FlexibleSearchQuery flexibleSearchQuery = new FlexibleSearchQuery("
SELECT * FROM CUSTOMER AS c WHERE c.timestamp < ?inputDate")
flexibleSearchQuery.addQueryParameter("inputDate",
new DateTime(Instant.now()).minusDays(30).toDate());
final String QUERY = "SELECT * FROM {Customer} AS c WHERE c.timestamp < ?date";
final Map<String, Date> queryMap = new HashMap<String, Date>();
queryMap.put("date", DateUtils.addDays(new Date(),-30));
final SearchResult<CustomerModel> results = flexibleSearchService.search(QUERY , queryMap);
return results.getResult();
我正在尝试编写一个 FlexibleSearchQuery 来查找连接到 hsqldb 数据库的 hybris 中超过 30 天的记录,但下面的代码抛出
org.hsqldb.HsqlException: incompatible data types in combination
查询:
final FlexibleSearchQuery flexibleSearchQuery = new FlexibleSearchQuery("
SELECT * FROM CUSTOMER AS c WHERE c.timestamp < TRUNC(SYSDATE) - 30")
有人可以就如何解决此问题提出建议吗?
我宁愿像这样将 java.util.Date
对象传递给灵活查询
//Import statement
import java.util.Calendar;
import java.util.Date;
import org.apache.commons.lang.time.DateUtils;
//Flexible search query
final FlexibleSearchQuery flexibleSearchQuery = new FlexibleSearchQuery(" SELECT * FROM CUSTOMER AS c WHERE c.timestamp < ?days")
flexibleSearchQuery.addQueryParameter("days", substractDaysFromDate(30));
flexibleSearchService.search(flexibleSearchQuery);
//method to get date difference
private Date subtractDaysFromCurrentDate(int days)
{
Calendar cal = Calendar.getInstance();
cal.add(Calendar.DATE, -days);
cal = DateUtils.truncate(cal, Calendar.DATE);
return cal.getTime();
}
+1 到 HybrisHelp 答案。您应该计算日期并将其传递给灵活查询。
使用 Java 8 次 api 的相同版本的较短版本。
final FlexibleSearchQuery flexibleSearchQuery = new FlexibleSearchQuery("
SELECT * FROM CUSTOMER AS c WHERE c.timestamp < ?inputDate")
flexibleSearchQuery.addQueryParameter("inputDate",
new DateTime(Instant.now()).minusDays(30).toDate());
final String QUERY = "SELECT * FROM {Customer} AS c WHERE c.timestamp < ?date";
final Map<String, Date> queryMap = new HashMap<String, Date>();
queryMap.put("date", DateUtils.addDays(new Date(),-30));
final SearchResult<CustomerModel> results = flexibleSearchService.search(QUERY , queryMap);
return results.getResult();