2017-05-08 12 views
0

에 대한 값을 설정해야합니다지난 "N"개월 동안 주문을 가져 오려고합니다. 다음 쿼리에서 동적으로 달에 대한 값을 설정하는 동안 나는 자바 예외를 얻고 개월

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

을하지만이 쿼리는 MySQL의에서 제대로 작동합니다.

expection 추적 : 서블릿 :

ERROR 유연한 검색 오류가 발생 [hybrisHTTP34] [FlexibleSearch] ... 2017년 5월 8일 오후 1시 53분 18초 org.apache.catalina.core.StandardWrapperValve SEVERE를 호출 .service() servlet [DispatcherServlet]이 경로 [/ jafrastorefront]가있는 컨텍스트에서 throw 된 예외 [요청 처리가 실패했습니다. 중첩 예외는 de.hybris.platform.servicelayer.search.exceptions.FlexibleSearchException : SQL 검색 오류 - 근본 원인을 가진 'flexible.search.exception.show.query.details'속성 사용 가능] org.hsqldb.HsqlException : 예기치 않은 토큰 :?

+0

무엇 자바 예외입니다? 이 같은 정교함은 말이되지 않습니다. – Blank

+0

무슨 소송입니까? PreparedStatement 또는 최대 절전 모드? 첫 번째 경우에는 '?'이어야하며, 뒤에 '?'또는 ': months'여야합니다. – Alexey

+0

검색어 조건이 잘못되었습니다. 미래를 의미하는 creationtime> = NOW()를가집니다. – fredt

답변

0

Java 예외에 대해서는 확실하지 않지만 논리가 현명한 경우이 문제가 발생합니다.

NOW()5th May 경우, DATE_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) 

다음 자바가 작동해야합니다.

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

HSQLDB의 SQL 구문은

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