select 
    k1,
    k2,
    decode(sign(to_number(substr(to_char(k5,'yyyymmdd'),7,2))-11),-1,k4,null) a1
    decode(sign(to_number(substr(to_char(k5,'yyyymmdd'),7,2))-10),1,decode(sign(to_number(substr(to_char(k5,'yyyymmdd'),7,2))-21),-1,k4,null),null) a2
    decode(sign(20-to_number(substr(to_char(k5,'yyyymmdd'),7,2))),-1,k4,null) a3
from 表名

解决方案 »

  1.   

    --sorry,忘了加逗号了select 
      k1,
      k2,
      decode(sign(to_number(substr(to_char(k5,'yyyymmdd'),7,2))-11),-1,k4,null) a1,
      decode(sign(to_number(substr(to_char(k5,'yyyymmdd'),7,2))-10),1,
                  decode(sign(to_number(substr(to_char(k5,'yyyymmdd'),7,2))-21),-1,k4,null),null) a2,
      decode(sign(20-to_number(substr(to_char(k5,'yyyymmdd'),7,2))),-1,k4,null) a3
    from 
        表名
      

  2.   

    楼上的,直接to_char(k5,'DD') 就可以取出日期来了,干嘛还转那么一大圈?
      

  3.   

    改进一下
    select 
      k1,
      k2,
      decode(ceil(to_char(k5,'dd')/11),1,k4,null) a1,
      decode(ceil(to_char(k5,'dd')/10),2,k4,null) a2,
      decode(ceil(to_char(k5,'dd')/10),3,k4,4,k4,null) a3,from 
        表名
      

  4.   

    错了,第一个应该是除以10select 
      k1,
      k2,
      decode(ceil(to_char(k5,'dd')/10),1,k4,null) a1,
      decode(ceil(to_char(k5,'dd')/10),2,k4,null) a2,
      decode(ceil(to_char(k5,'dd')/10),3,k4,4,k4,null) a3,from