我正在尝试获取最近 "N" 个月的订单。在以下查询中,我需要动态设置月份的值
I am trying to fetch orders for last "N" months. In the following query I need to dynamically set the value for months
我在设置月值时遇到 java 异常:
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.service() for servlet [DispatcherServlet] 在路径 [/jafrastorefront] 上下文中抛出异常 [请求处理失败;嵌套异常是 de.hybris.platform.servicelayer.search.exceptions.FlexibleSearchException: SQL 搜索错误 - 启用 属性 'flexible.search.exception.show.query.details' 以获得更多详细信息] 与根本原因
org.hsqldb.HsqlException:意外标记:?
不确定 java 异常,但逻辑上,你的代码有这个问题。
如果NOW()
是5th May
,DATE_SUB(NOW(),INTERVAL 1 MONTH)
将是5th April
,所以你同时选择记录> 5th May
和< 5th April
时间。因此你不会得到任何结果。
使用between避免混淆,使用BETWEEN
.
SELECT * FROM {Order}
WHERE creationtime BETWEEN
DATE_SUB(NOW(), INTERVAL 1 MONTH )
AND
NOW()
如果您想获取最近 'N' 个月的数据,您可以直接使用以下查询。
where creationtime>= ( CURDATE() - INTERVAL 1 month)
在 java 以下应该有效。
SELECT *
FROM {Order}
WHERE creationtime>= ( CURDATE() - INTERVAL ? month)
HSQLDB SQL语法是
SELECT * FROM "Order"
WHERE creationtime >= NOW() - CAST(? AS INTERVAL MONTH)
我在设置月值时遇到 java 异常:
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.service() for servlet [DispatcherServlet] 在路径 [/jafrastorefront] 上下文中抛出异常 [请求处理失败;嵌套异常是 de.hybris.platform.servicelayer.search.exceptions.FlexibleSearchException: SQL 搜索错误 - 启用 属性 'flexible.search.exception.show.query.details' 以获得更多详细信息] 与根本原因 org.hsqldb.HsqlException:意外标记:?
不确定 java 异常,但逻辑上,你的代码有这个问题。
如果NOW()
是5th May
,DATE_SUB(NOW(),INTERVAL 1 MONTH)
将是5th April
,所以你同时选择记录> 5th May
和< 5th April
时间。因此你不会得到任何结果。
使用between避免混淆,使用BETWEEN
.
SELECT * FROM {Order}
WHERE creationtime BETWEEN
DATE_SUB(NOW(), INTERVAL 1 MONTH )
AND
NOW()
如果您想获取最近 'N' 个月的数据,您可以直接使用以下查询。
where creationtime>= ( CURDATE() - INTERVAL 1 month)
在 java 以下应该有效。
SELECT *
FROM {Order}
WHERE creationtime>= ( CURDATE() - INTERVAL ? month)
HSQLDB SQL语法是
SELECT * FROM "Order"
WHERE creationtime >= NOW() - CAST(? AS INTERVAL MONTH)