select TO_DATE(SUBSTR(字段, 0, 6),'YYYYMM') from 表名
字段是char(8)类型的,我在使用上述SQL语句时ORACLE提示"月份指定无效",是怎么回事?该怎么解决呢?谢谢.

解决方案 »

  1.   

    select TO_DATE(SUBSTR(字段, 0, 6),'YYYYMM') from 表名
    你把SUBSTR(字段, 0, 6)的結果Select出來看看就知道了,要不就是最後兩位大於12(月份不能大於12麼。
    如果不是這個問題,試試to_date(string, 'YYYY/MM')
      

  2.   

    SUBSTR(字段, 0, 6)出来的结果是正确的,也没有月份的数据大于12.
    但是很奇怪,"select TO_DATE(SUBSTR(字段,0,6),'YYYYMM') from 表名" 加了个where 条件后,就能够出来数据了,但数据的显示格式是:'YYYY/MM/DD',而非'YYYYMM',也就是说指定'YYYYMM'格式根本没有效果,出来的是to_date()函数默认的数据.
    我检查了所有的数据,都没有问题.
      

  3.   

    如果你的日期是这样的话:'16-Jan-2006' 就用select TO_DATE(SUBSTR(字段, 1, 6),'YYYY-MM','NLS_DATE_LANGUAGE= American') from 表名'16-十月-2006'的话就用:select TO_DATE(SUBSTR(字段, 1, 6),'YYYY-MM','NLS_DATE_LANGUAGE= SIMPLIFIED CHINESE') from 表名
      

  4.   

    select TO_DATE(SUBSTR(字段,0,6),'YYYYMM') from 表名
        ===============================
                         当然不是你想要的格式,to_date是将字符转化成日期,select的话它会按默认的格式输出,你要按你的输出,必须这样select to_char(TO_DATE(SUBSTR(字段,0,6),'YYYYMM'),'yyyymm') from 表名
    这样表达才能得到你要的输出
      

  5.   

    select to_char(TO_DATE(SUBSTR(字段,0,6),'YYYYMM'),'yyyymm') from 表名
    ===========================================
    还是不行,仍然提示我指定月份无效,我快要崩溃了.
      

  6.   

    但是很奇怪,"select TO_DATE(SUBSTR(字段,0,6),'YYYYMM') from 表名" 加了个where 条件后,就能够出来数据了,
    ================
     说明表中有不符合的数据