oracle
  • date
  • select
  • ora-01830
  • 2013-11-26 11 views 22 likes 
    22

    Tôi cố gắng để thực hiện truy vấn của mình thông qua Java như thế này:ORA-01.830: Ngày định dạng hình ảnh kết thúc trước khi chuyển đổi toàn bộ chuỗi đầu vào/Chọn sum nơi ngày truy vấn

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

    Sau đó, tôi gọi execSumStatement trong lớp:

    sql.execSumStatement2() ; 
    

    Khi tôi chạy nó tôi nhận được thông báo lỗi sau:

    java.sql.SQLDataException: ORA-01.830: ngày định dạng hình ảnh kết thúc trước khi chuyển đổi toàn bộ chuỗi đầu vào

    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) 
    

    Khi tôi thực hiện cùng một truy vấn trong SQL Developer nó hoạt động tốt. Tôi đã thực hiện tìm kiếm trên internet, và tôi đoán vấn đề là kiểu dữ liệu của ngày trong truy vấn, nên là Ngày, nhưng mọi thứ tôi đã thử không hoạt động ...

    Tôi là người mới bắt đầu lập trình để nó sẽ tuyệt vời nếu bạn có thể giải thích nó càng đơn giản càng tốt! Cảm ơn trước!

    Trả lời

    25

    Tôi nghĩ bạn không nên dựa vào chuyển đổi tiềm ẩn. Đó là một thực hành tồi.

    Thay vào đó bạn nên cố gắng như thế này:

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

    hoặc như

    datenum >= date '2013-09-01' 
    
    +2

    Định dạng cho ngày tháng (tùy chọn thứ hai) không chính xác.Nó phải là 'yyyy-mm-dd' (' ngày '2013-09-01''). Hơn nữa, khi so sánh ngày, hãy xem xét phần thời gian của một ngày. –

    +0

    @NicholasKrasnov: - Cảm ơn bạn đã cập nhật! Cập nhật câu trả lời của tôi là tốt! –

    +1

    Tôi vừa thử giải pháp đầu tiên và nó đã hoạt động! Nếu tôi thay đổi các thiết lập của datestamp thành "DD/MM/RRRR HH24: MI: SS" trong SQL Developer để thêm thời gian và thay đổi thứ tự của tháng và ngày, nên "to_date ('26/11/2013 14:34 : 45 ',' dd/mm/yyyy hh24: mm: ss ') "hoạt động? PS: Cảm ơn rất nhiều về câu trả lời nhanh! – user3036627

    8

    Bạn có thể thử này:

    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; 
    

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

    1

    Những gì bạn đã viết trong chuỗi sql của mình là Timestamp không phải là Date. Bạn phải chuyển đổi nó thành Date hoặc thay đổi loại trường cơ sở dữ liệu thành Timestamp để được xem chính xác.

    0

    Trong SQL Developer ..Go để Preferences -> NLS -> và thay đổi định dạng ngày tháng của bạn cho phù

    0

    Bạn có thể sử dụng

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

    Nếu bạn đang sử dụng nó trong một SP sau đó datatype biến của bạn nên được Varchar2

    và cũng trong mã ado.net bạn datatype của tham số đầu vào của bạn nên được

    OracleDbType.Varchar2

    Về cơ bản, tôi phải đặt bộ lọc DateFrom và DateTo trong SP của mình để tôi chuyển ngày tháng thành Chuỗi trong đó.

    Lưu ý: Đây là một trong những giải pháp phù hợp với tôi, có thể có nhiều giải pháp cho vấn đề này.

    Các vấn đề liên quan