select '' from tablename
where not between date1 and date2

解决方案 »

  1.   

    select * from tabname where datefield >= to_date('20030101000000','YYYYMMDDHH24MISS') and datefield <= to_date('20040101000000','YYYYMMDDHH24MISS')
      

  2.   

    实在不好意思我很能说错了,
    在一个表中有一个WORK_DATE字段我要求出的是
    比如数据是
    20040101
    20040102
    20040103
    我给出日期20040101,20040115.
    要得到的是
    20040104
    ::::::::
    20040115
    怎么取非常感谢.
      

  3.   

    要求的是在一个日期范围内没有工作的日子(WORK_DATE是工作的日子)
    再次请教高手.
      

  4.   

    create table table_test
          (my_date date);
    ----------------------------------------------------------------create or replace procedure pro_test
          (
           begin_date  in varchar2,
           end_date    in varchar2
          )
    as
           i number(4); 
           j number(4);
    begin
           if to_date(begin_date,'yyyymmdd')>to_date(end_date,'yyyymmdd') then
              RAISE_APPLICATION_ERROR(-20007,'你輸入的起始日期大於結束日期!!!');
           end if;
           i:=to_date(end_date,'yyyymmdd')-to_date(begin_date,'yyyymmdd');
           for j in 0..i loop
               insert into table_test
                     (my_date)
               values( to_date(begin_date,'yyyymmdd')+j);
           end loop;       commit;       delete from table_test a 
           where  a.my_date in 
                 (
                  select distinct WORK_DATE
                  from your_table    
                 );        commit;
    end;
    ------------------------------------------------------sql>exec pro_test('20040104','20040115');sql>select * from table_test;
      

  5.   

    非常感谢baojianjun(包子)给出了一个解决问题的办法.
    但是不让创建临时表.再次感谢.
      

  6.   

    create procedure pro(p_start in date,p_end in date)
    as
    cursor t_sor is
    select WORK_DATE from tabname group by work_date order by work_date;
    type t_varr is varray(100) of date;
    v_varr t_varr;
    num number:=1;
    begin
    for v_sor in t_sor loop
    if v_sor.work_date>=p_end then
    return;
    enf if;
    /*开始日期与结束日期在范围内*/
    if v_sor.work_date>p_start and v_sor.work_date<p_end then
     if v_sor.work_date=p_start or v_sor.work_date=p_end then
      exit;
     end if;
    v_varry.extexd;
    v_varr(num):=v_sor.work_date;
    end if;
    /*开始日期在少于min(work_date),结束日期在范围内*/
    /*开始日期在范围内,结束日期大于max(work_dae)*/
    /*结束日期少于min(work_date)*/
    /*开始日期大于max(work_date)*/
    num:=num+1;
    end loop;
    end;
    /
    以上分别对以上条件作一个处理
      

  7.   

    假设原表表名为work
    这一个足够大(足够多的记录数)的表,比如test
    然后:
    select start_date + rownum - 1 from test 
    where rownum <= end_date - start_date
    minus
    select word_date from word;如果相差一两条记录或者相差一两天,自己可以修改补上。
      

  8.   

    谢谢 beckhambobo(beckham) 和hc_yao(木头) 
    但是我还是想找更好的办法.
    谁有更好的解决方法啊?在此对回复的人表示谢谢.
      

  9.   

    你干吗一定要在数据库里完成这种任务呀!!在程序里轻松搞定。
     hc_yao(木头) 的方法不错,先把所有枚举日期都建在一个test表中,随时使用。要不然很难办。
      

  10.   

    问题我以解决.最要感谢的是baojianjun(包子) ,beckhambobo(beckham) 
    还有每一个答复的人.