2017-05-08 50 views
0

我收到Java异常而几个月设定值:我正在尝试获取最近“N”个月的订单。在下面的查询我需要动态设置的值数月

SELECT * 
    FROM {Order} 
WHERE creationtime >= NOW() 
    AND creationtime <= DATE_SUB(NOW(), INTERVAL ?months MONTH) 

但是这种查询是在MySQL工作正常。

厚望跟踪:

错误[hybrisHTTP34] [FlexibleSearch]灵活的搜索出错... 2017年5月8日下午1点53分18秒org.apache.catalina.core.StandardWrapperValve调用 重度:Servlet的servlet [DispatcherServlet]在path [/ jafrastorefront]上下文中的.service()引发异常[Request processing failed;嵌套的异常是de.hybris.platform.servicelayer.search.exceptions.FlexibleSearchException:SQL搜索错误 - 启用属性'flexible.search.exception.show.query.details'以获得更多详细信息],其根本原因为 org.hsqldb.HsqlException : 意外的标记: ?

+0

什么Java异常?这样的阐述确实没有意义。 – Blank

+0

yiu suing是什么? PreparedStatement或休眠?在第一种情况下,它应该是'?',在后者中 - 它应该是'?'或':months' – Alexey

+0

您的查询条件错误。它的创造时间> = NOW()这意味着未来。 – fredt

回答

0

不确定关于java异常,但逻辑上,你的代码有这个问题。

如果NOW()5th MayDATE_SUB(NOW(),INTERVAL 1 MONTH)5th April,那么,你是在同一时间选择记录> 5th May< 5th April。因此你将得不到结果。

之间使用以避免混淆,请使用BETWEEN

SELECT * FROM {Order} 
WHERE creationtime BETWEEN 
    DATE_SUB(NOW(), INTERVAL 1 MONTH) 
AND 
    NOW() 
0

如果您想获取最近'N'个月的数据,可以直接使用以下查询。

where creationtime>= (CURDATE() - INTERVAL 1 month) 

在java下面应该可以工作。

SELECT * 
    FROM {Order} 
WHERE creationtime>= (CURDATE() - INTERVAL ? month) 
0

的HSQLDB SQL语法

SELECT * FROM "Order" 
WHERE creationtime >= NOW() - CAST(? AS INTERVAL MONTH) 
相关问题