真是要被oracle搞死了,总是遇到古怪的问题SQL语句如下,BIRTHDAY是日期类型,yyyy-MM-dd
这句是可以运行的,不会报错:
SELECT TO_NUMBER(SUBSTR(TO_CHAR(BIRTHDAY),0,4)) FROM BO_HT_EM_BASIC_INFO这句报无效数字:
SELECT 1 FROM BO_HT_EM_BASIC_INFO WHERE TO_NUMBER(SUBSTR(TO_CHAR(BIRTHDAY),0,4)) > 60心累累的,按照菜鸟我的理解,既然能select出来说明都是合法的啊,为啥放在where里面就无效了,求助大神帮我解答下

解决方案 »

  1.   

    既然能select出来说明都是合法的啊你是在 PLSQL 是查询的吧? 应该是第一屏的数据都是合法的,你展开所有数据试试;
      

  2.   


    不是PLSQL,是NAVICATE,直接查出所有的数据的
      

  3.   

    CREATE TABLE AA_BAK 
    ASSELECT TO_NUMBER(SUBSTR(TO_CHAR(BIRTHDAY),0,4))  CC FROM BO_HT_EM_BASIC_INFO看看能创建成功吗?
      

  4.   


    不是PLSQL,是NAVICATE,直接查出所有的数据的您的语句可以创建表成功
    而且我发现类似下面这种语句也不能执行成功
    SELECT BIRTHDAY FROM(
    SELECT BIRTHDAY,TO_NUMBER(SUBSTR(TO_CHAR(BIRTHDAY),6,2)) AS MM FROM BO_HT_EM_BASIC_INFO WHERE RETIREMENT_NUM IS NULL)
    WHERE MM <1 OR MM>12子查询是可以成功的,但是外面包了一层之后并且对TO_NUMBER的字段做查询,还是报ORA-01722: 无效数字。数据库版本:
      

  5.   


    找到了一个类似的,有点明白他说的意思,但是不知道怎么解决
    http://413486774.iteye.com/blog/1409294
      

  6.   


    是不是还有别的 WHERE 条件 ?