doub number(10,2);
doub=round(datediff(day,'2006-6-17 8:00:00',to_char(c_date,'YYYY-MM-DD HH24:MI:SS')) % 4,2);我在 toad 建立个函数,里面的这条语句怎么就通不过 呢,提示“ERROR line 27, col 4, ending_line 27, ending_col 7, Found 'doub', CASE is expected”我是要把两个时间想减,然后得到 “带小数” 的天数 ,为了 计算班别用的
'2006-6-17 8:00:00' 是丙班,以此类推。。
if (doub >= 0 and doub < 0.5) then
        class = '丙';
   elsif (doub >= 0.5 and doub < 1) then
        class = '乙';
   elsif (doub >= 0.5 and doub < 1) then
        class = '丁';
   elsif (doub >= 0.5 and doub < 1) then
        class = '丙';
   elsif (doub >= 0.5 and doub < 1) then
        class = '甲';
   elsif (doub >= 0.5 and doub < 1) then
        class = '乙';
   elsif (doub >= 0.5 and doub < 1) then
        class = '丁';
   elsif (doub >= 0.5 and doub < 1) then
        class = '甲';
   end if;
   return class;
=======
还有 toad 里怎么给时间变量赋值 ,我 t_date date;   --丙,白班
                                    set t_date = 2006-6-17 8:00:00;这么不行

解决方案 »

  1.   

         set t_date :=to_date('2006-6-17 8:00:00','yyyy-mm-dd')
    需要数据类型转换
      

  2.   

    这个doub=round(datediff(day,'2006-6-17 8:00:00',to_char(c_date,'YYYY-MM-DD HH24:MI:SS')) % 4,2); 里面的datediff函数用的不对。建议换成 
    doub=round(datediff(day,c_date)) % 4,2); 
      

  3.   

    oracle函数简介
      

  4.   

    select ceil((To_date('2009-6-12 15:42:30' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2006-6-17 8:00:00' , 'yyyy-mm-dd hh24-mi-ss')))  相差天数 FROM DUAL;
      

  5.   

    直接减法呀SQL> select To_date('2009-6-12 15:42:30' , 'yyyy-mm-dd hh24-mi-ss') - To_date('2
    006-6-17 8:00:00' , 'yyyy-mm-dd hh24-mi-ss') rtn FROM DUAL;       RTN
    ----------
    1091.32118
      

  6.   

    还是不行,我的函数的作用就是传进去一个时间,然后计算出班别,并返回。
    下面是我完整的函数,怎么就是第 8行(  doub=round((ceil(To_date(C_date ,t_date)%4),2);)
    无法通过。CREATE OR REPLACE FUNCTION f_sl2_class(c_date date) return varchar2 
    as
    class varchar2(4);
    t_date date;   --丙,白班
    set t_date := to_date('2006-6-17 8:00:00','YYYY-MM-DD HH24:MI:SS');
    doub number(100,10);
    BEGIN
       doub=round((ceil(To_date(C_date ,t_date)%4),2);
       if (doub >= 0 and doub < 0.5) then
            class = '丙';
       elsif (doub >= 0.5 and doub < 1) then
            class = '乙';
       elsif (doub >= 0.5 and doub < 1) then
            class = '丁';
       elsif (doub >= 0.5 and doub < 1) then
            class = '丙';
       elsif (doub >= 0.5 and doub < 1) then
            class = '甲';
       elsif (doub >= 0.5 and doub < 1) then
            class = '乙';
       elsif (doub >= 0.5 and doub < 1) then
            class = '丁';
       elsif (doub >= 0.5 and doub < 1) then
            class = '甲';
       end if;
       return class;
    END f_sl2_class;
      

  7.   

     doub=round((ceil(To_date(C_date ,t_date)/4),2);oracle里面除是/不是%
      

  8.   

    我不是要除 ,是要取余数,取余数好像不是 %,是 mod
    原来不是 =, 而是 :=这回通过了,但还想问一下 To_date(C_date ,t_date)mod 4
    这个得到的是小数吗?
    如果是两个小数 取模 得到的就应该是小数吧??
      

  9.   


    不是 ,这个得到的是日期啊,date类型的。
      

  10.   

    我打错了 ,我说的是这个 round((c_date - t_date) mod 4,2)
    这个是 这个得到的是 天吗?是小数吗