在语句中对一列字符串提取其实日期部分,然后to_date成日期格式。但由于人工输入的时有些不太规范,无法正确转成日期,有什么方法可以预先判断一下字符内容是否是有效的日期?SQL> select DATUM,to_date(substr(EREIGNIS,10,instr(EREIGNIS,'-',1,4)-10),'yyyy-mm-dd-hh24:mi'),
.....
ERROR:
ORA-01858: a non-numeric character was found where a numeric was expected检查了一下,此刻的内容是非 'yyyy-mm-dd-hh24:mi', 输入的时候不规范造成的。是否能跳过继续执行SQL语句。

解决方案 »

  1.   

    没说明白。本来这名是打算
    insert into newTable(mydate) 
    select to_date(colk,'yyyy-mm-dd-hh24:mi') from oldtable如果避免这种错误停止?能否有下面这种方式来实现?insert into newTable(mydate) 
    select to_date(colk,'yyyy-mm-dd-hh24:mi') from oldtable
    where ????
      

  2.   

    创建一个函数check_date,输入参数为字符串,如果字符串符合'yyyy-mm-dd-hh24:mi'的日期格式,返回日期,否则返回空
    CREATE OR REPLACE FUNCTION check_date(p_str VARCHAR2) RETURN NUMBER AS
      v_date DATE;
    BEGIN
      SELECT to_date(p_str,'yyyy-mm-dd-hh24:mi')
        INTO v_date
        FROM DUAL;
      RETURN v_date;
      EXCEPTION WHEN OTHERS THEN
      RETURN NULL;
    END;
    /SELECT check_date(colk) FROM yourtab;