itsource

ORA-01830: 입력 문자열 전체를 변환하기 전에 날짜 형식 이미지 종료 / 날짜 쿼리가 있는 합계를 선택하십시오.

mycopycode 2023. 3. 28. 21:46
반응형

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

그런 다음 클래스의 execSummaryStatement를 호출합니다.

sql.execSumStatement2 () ;

실행 시 다음 오류 메시지가 나타납니다.

java.sql.SQLData Exception: 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에서 동일한 쿼리를 실행하면 정상적으로 동작합니다.이미 인터넷을 통해 검색했습니다.문제는 쿼리에 있는 날짜의 데이터 타입(날짜)이라고 생각됩니다만, 모든 것이 동작하지 않았습니다.

암묵적인 변환에 의존해서는 안 된다고 생각합니다.그것은 나쁜 습관이다.

대신 다음과 같이 시도해야 합니다.

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

또는 같은

datenum >= date '2013-09-01'

다음과 같이 시험해 보십시오.

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/

SQL Developer 。[ Preferences ]-> [ NLS ]- > [ Date format ]를 선택합니다.

sql 문자열에 입력된 내용은Timestamp것은 아니다.Date. 변환해야 합니다.Date또는 데이터베이스 필드 유형을 다음으로 변경합니다.Timestamp제대로 보이도록 말이야

다음과 같이 시도해 볼 수 있습니다.

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를 제공합니다.이 결과 유일한 날짜 부분을 개별적으로 비교할 수 있으며 시간 부분은 건너뜁니다.

사용할 수 있습니다.

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 필터를 넣어야 했기 때문에 날짜를 String으로 전달했습니다.

주의: 이것은 저에게 효과가 있는 솔루션 중 하나이며, 이 문제에 대한 다른 해결책이 있을 수 있습니다.

SELECT CAST(COLUMN_NAME AS DATE) FROM TABLE_NAME

언급URL : https://stackoverflow.com/questions/20219363/ora-01830-date-format-picture-ends-before-converting-entire-input-string-sele

반응형