web-dev-qa-db-ja.com

ORA-01830:入力文字列全体を変換する前に日付形式の画像が終了します

次のようにJavaを介してクエリを実行しようとしています。

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

次に、クラスでexecSumStatementを呼び出します。

sql.execSumStatement2 () ;

実行すると、次のエラーメッセージが表示されます。

Java.sql.SQLDataException:ORA-01830:入力文字列全体を変換する前に日付形式の画像が終了します

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)

SQL Developerで同じクエリを実行すると、問題なく動作します。私はすでにインターネット上で検索を行っており、問題はクエリ内の日付のデータ型であると思いますが、これはDateでなければなりませんが、私が試したすべてはうまくいきませんでした...

私はプログラミングの初心者なので、できるだけ簡単に説明できたら素晴らしいと思います!前もって感謝します!

30
user3036627

暗黙の変換に頼るべきではないと思います。それは悪い習慣です。

代わりに、このようにしてみてください:

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

またはのような

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

これを試すことができます:

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;

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

8
heythere

SQL文字列に記述したのは、Timestampではなく、Dateです。正しく表示するには、Dateに変換するか、データベースフィールドのタイプをTimestampに変更する必要があります。

1
Abbas Tofighi

SQL Developerで..「設定」->「NLS」に移動し、それに応じて日付形式を変更します

1
nidhil ch

使用できます

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

SPで使用している場合、変数のデータ型はVarchar2である必要があります

また、ado.netコードでは、入力パラメーターのデータ型は

OracleDbType.Varchar2

基本的に、SPにDateFromおよびDateToフィルターを挿入する必要があったため、日付を文字列として渡しました。

注:これは私のために働いた解決策の1つであり、この問題にはさらに解決策があるかもしれません。

0
Jitender Kumar

あなたはそれが私のために働く次のように試すことができます

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

または

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

To_charを使用することもできますが、to_charが高すぎることを忘れないでください

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

TRUNC(17-SEP-2018 08:30:11)は、結果として17-SEP-2018 00:00:00を返します。日付部分のみを個別に比較でき、時間部分はスキップされます。

0
Bablu Ahmed