【问题标题】:getting java.sql.SQLDataException: ORA-01858: a non-numeric character was found where a numeric was expected获取 java.sql.SQLDataException: ORA-01858: 在需要数字的地方发现了一个非数字字符
【发布时间】:2016-11-18 16:44:58
【问题描述】:

我正在尝试运行以下查询我得到一个非数字字符在此处预期为数字的地方是查询

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_timeDATE 类型的对象,它在 sqldeveloper 中工作正常,但从应用程序中它不起作用

请澄清我哪里出错了,任何帮助将不胜感激。谢谢你

【问题讨论】:

    标签: java oracle


    【解决方案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(),您可能会错过索引..

    【讨论】:

    • 感谢 ravi 的回复。我在 sql 开发人员中尝试了上面的方法,但是如果我从应用程序执行,我没有得到任何数据,很高兴我没有得到异常。但它没有获取任何数据。我不知道可能是什么原因
    • 尝试格式为 Mon ,用于月份名称。!我更新了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多