有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

oracle正在获取java。sql。SQLDataException:ORA01858:在需要数字的位置找到非数字字符

我正在尝试运行下面的查询,我得到一个非数字字符,这里是查询

select * from schedule where to_date(SHDL_STRT_TIME,'dd-MON-yy HH24:mi:ss')                                            
IN('11-Jan-15 20:30:00','11-Jan-15 08:00:00','11-Jan-15 20:00:00')

而且shdl_strt_time是类型DATE的对象,它在sqldeveloper中工作正常,但从应用程序来看它不工作

请澄清我哪里出了问题,任何帮助都将不胜感激。多谢各位


共 (1) 个答案

  1. # 1 楼答案

    SHDL_STRT_TIME已经是DATE类型,因此不需要在其上使用TO_DATE()

    但是TO_CHAR()这正是你所需要的

    另外MON将月份表示为JAN。。。因此,您需要一个Mon来表示Jan

    select * from schedule where to_char(SHDL_STRT_TIME,'dd-Mon-yy HH24:mi:ss')                                            
    IN('11-Jan-15 20:30:00','11-Jan-15 08:00:00','11-Jan-15 20:00:00')
    

    最后,优雅的解决方案可能是

    select * from schedule where SHDL_STRT_TIME IN(:DATE1, :DATE2, :DATE3)
    

    JDBC中,使用java.sql.Date绑定值。因为,Mon可能不是Jan是非美国数据库!!!此外,如果对索引执行to_char(),则可能会丢失索引