部门表:
create table TEST1
(
  D_NAME     VARCHAR2(30),
  START_DATE DATE,
  END_DATE   DATE,
  D_CODE     VARCHAR2(10)
)表的记录:
D_NAME   START_DATE  END_DATE       D_CODE     
广东 2011-1-1    2011-1-31 1
香港 2011-2-1    9999-2-18 1
现在如果限定D_CODE=1 并传入一个时间为2011-1-15,则能取得部门名称为“广东”;如果传入的时间为2011-3-1,则可以取得部门名为“香港”。
现在有个问题,设定传入的时间为2011-1-15,怎样写一个select语句,取得“广东”这个已失效的部门?不能用游标、存储过程,只能用select.

解决方案 »

  1.   

    select d_name from test1 where d_code=1 and to_date('2011-01-15','yyyy-mm-dd') between start_date and end_date;
      

  2.   

    WITH A  as 
    (SELECT 'guangdong' as d_name,to_date('2011-1-1','YYYY-MM-DD') as start_date,to_date('2011-1-31','YYYY-MM-DD') as end_date,'1'as d_code  from dual 
     union all 
     SELECT 'hongkong' as d_name,to_date('2011-2-1','YYYY-MM-DD') as start_date,to_date('9999-2-18','YYYY-MM-DD') as end_date,'1'as d_code  from dual 
     )
     select * from a 
     where d_code=1 
     and to_date('2011-1-15','YYYY-MM-DD')>start_date and to_date('2011-1-15','YYYY-MM-DD')<end_date