web-dev-qa-db-fra.com

ORA-01830: l'image au format de date se termine avant la conversion de la chaîne de saisie entière/Sélectionnez la somme où la requête de date

J'essaie d'exécuter ma requête via Java comme ceci:

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);
}

Ensuite, j'appelle execSumStatement dans la classe:

sql.execSumStatement2 () ;

Lorsque je l'exécute, le message d'erreur suivant s'affiche:

Java.sql.SQLDataException: ORA-01830: l'image au format de date se termine avant la conversion de la chaîne de saisie entière

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)

Lorsque j'exécute la même requête dans SQL Developer, cela fonctionne parfaitement. J'ai déjà fait une recherche sur Internet, et je suppose que le problème est le type de données de la date dans la requête, qui devrait être Date, mais tout ce que j'ai essayé n'a pas fonctionné ... 

Je suis un débutant en programmation, alors ce serait formidable si vous pouviez l'expliquer aussi simplement que possible! Merci d'avance!

26
user3036627

Je pense que vous ne devriez pas compter sur la conversion implicite. C'est une mauvaise pratique.

Au lieu de cela, vous devriez essayer comme ceci:

datenum >= to_date('11/26/2013','mm/dd/yyyy')

ou comme

datenum >= date '2013-09-01'
30
Rahul Tripathi

Vous pouvez essayer ceci:

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;

Source:http://notsyncing.org/2008/02/manipulando-fechas-con-horas-en-plsql-y-sql/

8
heythere

Ce que vous avez écrit dans votre chaîne SQL est une Timestamp pas Date. Vous devez le convertir en Date ou modifier le type du champ de base de données en Timestamp pour qu'il soit correctement visualisé.

1
Abbas Tofighi

Dans SQL Developer .. Allez dans Préférences -> NLS -> et modifiez votre format de date en conséquence

1
nidhil ch

Vous pouvez essayer comme suit cela fonctionne pour moi

select * from nm_admission where trunc(entry_timestamp) = to_date('09-SEP-2018','DD-MM-YY');

OU

select * from nm_admission where trunc(entry_timestamp) = '09-SEP-2018';

Vous pouvez aussi essayer d'utiliser to_char mais n'oubliez pas que to_char est trop cher

select * from nm_admission where to_char(entry_timestamp) = to_date('09-SEP-2018','DD-MM-YY');

Le TRUNC (17-SEP-2018 08:30:11) donnera 17-SEP-2018 00:00:00 en conséquence, vous pouvez comparer la partie de date unique indépendamment et la partie d'heure sera sautée.

0
Bablu Ahmed