select decode(sign(:a-col2),1,col3,col4) from tbname;

解决方案 »

  1.   

    或者
    select col3 from tbname where col2>=your_time
    union 
    select col4 from tbname where col2<your_time;
      

  2.   

    不好意思,符号反了
    select col3 from tbname where col2<=your_time
    union 
    select col4 from tbname where col2>your_time;
      

  3.   

    那就采用bzszp(SongZip) 的方法,不过字段2上要加个to_number()函数转换就可以了
      

  4.   

    select decode(sign(:a-(select to_date(col2,'yyyy-mm-dd') from dual),1,col3,col4) from tbname;
    我的字段2是6位的字符型的。
    那怎么会出现8个数字?
      

  5.   

    传入参数是日期类型?
    select decode(sign(:a-to_date(col2,'yyyymmdd')),1,col3,col4) from tbname;
      

  6.   

    感觉楼主传入的应该是字符型,但奇怪的一点是为什么位的字符型包含的数据会是8个数字,不知道是不是楼主表达错了,试一下select decode(sign(to_date(:a,'yyyymmdd')-to_date(col2,'yyyymmdd')),1,col3,col4) from tbname;全部转换成日期型去比较!