it-swarm.com.de

ORA-01830: Das Datumsformatbild wird vor der Umwandlung der gesamten Eingabezeichenfolge beendet

Ich versuche, meine Abfrage folgendermaßen über Java auszuführen:

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

Dann rufe ich execSumStatement in der Klasse auf:

sql.execSumStatement2 () ;

Beim Ausführen erhalte ich folgende Fehlermeldung:

Java.sql.SQLDataException: ORA-01830: Das Datumsformatbild wird beendet, bevor die gesamte Eingabezeichenfolge konvertiert wird

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)

Wenn ich dieselbe Abfrage in SQL Developer ausführen, funktioniert das einwandfrei. Ich habe bereits über das Internet gesucht, und ich denke, das Problem ist der Datentyp des Datums in der Abfrage, der Datum sein sollte, aber alles, was ich ausprobiert habe, hat nicht funktioniert ... 

Ich bin ein Anfänger in der Programmierung, es wäre also toll, wenn Sie es so einfach wie möglich erklären könnten! Danke im Voraus!

26
user3036627

Ich denke, Sie sollten sich nicht auf die implizite Konvertierung verlassen. Das ist eine schlechte Praxis.

Stattdessen sollten Sie es so versuchen:

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

oder ähnlich

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

Sie können dies versuchen:

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

Was Sie in Ihre SQL-Zeichenfolge geschrieben haben, ist eine Timestamp nicht Date. Sie müssen es in Date konvertieren oder den Typ des Datenbankfelds in Timestamp ändern, damit es korrekt angezeigt wird.

1
Abbas Tofighi

In SQL Developer .. Gehen Sie zu Einstellungen -> NLS -> und ändern Sie das Datumsformat entsprechend

1
nidhil ch

Sie können verwenden

Select to_date('08/15/2017 12:00:00 AM','MM/DD/YYYY HH:MI:SS AM') from dual;

Wenn Sie es in einem SP verwenden, sollte Ihr variabler Datentyp Varchar2 Sein.

und auch in deinem ado.net code sollte der datentyp deines eingabeparameters sein

OracleDbType.Varchar2

Grundsätzlich musste ich einen DateFrom- und einen DateTo-Filter in mein SP) einfügen, damit ich darin Daten als Zeichenfolge übergebe.

Anmerkung: Dies ist eine der Lösungen, die für mich funktioniert haben. Es könnte weitere Lösungen für dieses Problem geben.

0
Jitender Kumar

Du kannst es wie folgt versuchen, es funktioniert für mich

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

ODER

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

Sie können es auch mit to_char versuchen, aber denken Sie daran, to_char ist zu teuer

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

Der TRUNC (17-SEP-2018 08:30:11) gibt als Ergebnis 17-SEP-2018 00:00:00 aus. Sie können den einzigen Datumsteil unabhängig voneinander vergleichen und den Zeitanteil überspringen.

0
Bablu Ahmed