我有这个查询
SELECT to_char(trunc(fecha,'HH')+(30*round(to_char( trunc(fecha,'MI'),'MI')/30))/1440,'DD/MM/YYYY hh24:mi:ss') AS fecha
, SUM(total) AS total
FROM (SELECT FECHA_CREACION AS FECHA, Count(FECHA_CREACION) AS TOTAL
FROM ROBOT_CONTEO_CONSULTA
GROUP BY FECHA_CREACION)
WHERE fecha BETWEEN :fechaDesde AND :fechaHasta
GROUP BY to_char(trunc(fecha,'HH')+(30*round(to_char( trunc(fecha,'MI'),'MI')/30))/1440,'DD/MM/YYYY hh24:mi:ss')
ORDER BY fecha ASC;
但它给了我这个:
错误消息:ORA-00905:缺少关键字
但是,当我做这样的事情时
WHERE fecha BETWEEN CURRENT_DATE-20 AND CURRENT_DATE
确实有效。有什么问题?
我需要参数,因为我将用它创建一个视图。
完整错误:
答案 0 :(得分:0)
我认为你混合了两件事。您当前从Java应用程序调用的查询以及要创建的视图。
在提供的查询中,您确实需要这两个您将在应用程序中绑定的变量query.setParameter("fechaDesde", myStartDate);
但是您不需要在视图中放置这些参数,只需尝试以下操作:
CREATE OR REPLACE VIEW MY_TEST_VIEW AS
SELECT to_char(trunc(fecha,'HH')+(30*round(to_char( trunc(fecha,'MI'),'MI')/30))/1440,'DD/MM/YYYY hh24:mi:ss') AS fecha
, SUM(total) AS total
FROM (SELECT FECHA_CREACION AS FECHA, Count(FECHA_CREACION) AS TOTAL
FROM ROBOT_CONTEO_CONSULTA
GROUP BY FECHA_CREACION)
GROUP BY to_char(trunc(fecha,'HH')+(30*round(to_char( trunc(fecha,'MI'),'MI')/30))/1440,'DD/MM/YYYY hh24:mi:ss')
ORDER BY fecha ASC;
然后在您的Java代码中,您将拥有类似
的内容Query query = session.createQuery("FROM MY_TEST_VIEW WHERE FETCHA BETWEEN :fechaDesde AND :fechaHasta");
query.setParameter("fechaDesde ", myStartDateVar);
query.setParameter("fechaHasta", myEndDateVar);
编辑:请注意,您的fecha
字段是VARCHAR2而不是日期。如果您尝试执行某个操作,可能会有奇怪的行为,因为Oracle将测试提供的字符串是否在其他两个varchars之间,并且您将得到奇怪的结果。它应该是一个正常工作的日期