oracle - to_date - ORA-01830: la imagen del formato de fecha finaliza antes de convertir toda la cadena de entrada/Seleccionar suma donde la consulta de fecha
ora-01830: la máscara de formato de fecha termina antes de convertir toda la cadena de entrada (5)
Creo que no deberías confiar en la conversión implícita. Es una mala practica
En cambio, deberías intentarlo así:
datenum >= to_date(''11/26/2013'',''mm/dd/yyyy'')
o como
datenum >= date ''2013-09-01''
Estoy intentando ejecutar mi consulta a través de Java de esta manera:
public ResultSet execSumStatment2() throws SQLException{
String query = "Select SUM(A) as NCCSeptember from NCC where Datum >= ''01-09-2013 00:00:00'' and Datum <= ''30-09-2013 23:59:59''";
return execStatement(query);
}
Luego llamo a execSumStatement en la clase:
sql.execSumStatement2 () ;
Cuando lo ejecuto recibo el siguiente mensaje de error:
java.sql.SQLDataException: ORA-01830: la imagen del formato de fecha finaliza antes de convertir toda la cadena de entrada
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:447)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:951)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:513)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:227)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:208)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:886)
at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1175)
at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1296)
at oracle.jdbc.driver.OraclePreparedStatement.executeInternal(OraclePreparedStatement.java:3613)
at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:3657)
at oracle.jdbc.driver.OraclePreparedStatementWrapper.executeQuery(OraclePreparedStatementWrapper.java:1495)
at com.bachelorarbeit.SQLExecutor.execStatement(SQLExecutor.java:20)
at com.bachelorarbeit.SQLExecutor.execSumStatment2(SQLExecutor.java:56)
at com.bachelorarbeit.Test.doGet(Test.java:63)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1041)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:603)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Cuando ejecuto la misma consulta en SQL Developer, funciona bien. Ya hice una búsqueda en Internet, y creo que el problema es el tipo de datos de la fecha en la consulta, que debería ser Fecha, pero todo lo que probé no funcionó ...
¡Soy un principiante en programación, así que sería fantástico si pudieras explicarlo de la manera más simple posible! ¡Gracias por adelantado!
En SQL Developer ... vaya a Preferences -> NLS -> y cambie el formato de su fecha de acuerdo
Lo que ha escrito en su cadena sql es una Timestamp
Date
y Timestamp
no la Date
. Debe convertirlo a la Date
o cambiar el tipo de campo de la base de datos a Timestamp
para que se vea correctamente.
Puedes intentar esto:
Select To_date (''15/2/2007 00:00:00'', ''DD/MM/YYYY HH24:MI:SS''),
To_date (''28/2/2007 10:12'', ''DD/MM/YYYY HH24:MI:SS'')
From DUAL;
Fuente: http://notsyncing.org/2008/02/manipulando-fechas-con-horas-en-plsql-y-sql/
Puedes usar
Select to_date(''08/15/2017 12:00:00 AM'',''MM/DD/YYYY HH:MI:SS AM'') from dual;
Si lo está usando en un SP, entonces su tipo de datos variables debe ser Varchar2
y también en su código ado.net el tipo de datos de su parámetro de entrada debe ser
OracleDbType.Varchar2
Básicamente tuve que poner un filtro DateFrom y DateTo en mi SP, así que pasé las fechas como String en él.
Nota: Esta es una de las soluciones que funcionó para mí, podría haber más soluciones a este problema.