各位大虾,请教下面第一句正确,第二句为什么会报无效数字的错误呢?现行谢过!SELECT --正确
decode(sign(length(T.VALUE_DATE)-8),0,to_char(to_date(T.VALUE_DATE,'YYYYMMDD'),'DD/MM/YYYY'),1,to_char(to_date(T.VALUE_DATE,'YYYYMMDD'),'DD/MM/YYYY'),T.VALUE_DATE) VALUE_DATE
FROM TSELECT --报错:无效数字 
decode(sign(length(T.VALUE_DATE)-8),-1,T.VALUE_DATE,to_char(to_date(T.VALUE_DATE,'YYYYMMDD'),'DD/MM/YYYY')) VALUE_DATE
FROM T

解决方案 »

  1.   

    你的VALUE_DATE是什麼格式的,數據是否非法
      

  2.   

    decode(sign(length(T.VALUE_DATE)-8),-1,T.VALUE_DATE,to_char(to_date(T.VALUE_DAT...
    这里T.VALUE_DATE后面是不是少了个数字?
      

  3.   

    DECODE的格式是这样的:
    DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )
      

  4.   

    VALUE_DATE是number类型,没有非法数据。报错的那句只要把to_char(to_date(T.VALUE_DATE,'YYYYMMDD'),'DD/MM/YYYY')换成T.VALUE_DATE就不会报错。
    这两句只是位置调换了。
      

  5.   


    对不起,看错了
    decode返回什么类型是根据then部分来决定的,所以最后的to_char()部分会转换为number类型,
    就出错了,
    如果改成下面就应该没有问题SELECT
    decode(sign(length(T.VALUE_DATE)-8),-1,T.VALUE_DATE,to_char(to_date(T.VALUE_DATE,'YYYYMMDD'),'DDMMYYYY')) VALUE_DATE
    FROM T
    --或者
    SELECT decode(sign(length(T.VALUE_DATE)-8),-1,to_char(T.VALUE_DATE),to_char(to_date(T.VALUE_DATE,'YYYYMMDD'),'DD/MM/YYYY')) VALUE_DATE
    FROM T