表里面有三个字段,分别是 name (varchar2) ,startTime(Date),endTime(Date),分别表示的是“组织者名称”,“开始时间”,“结束时间”。表里面有很多数据。现在传入这3个参数,要判断新传入的“开始时间”和“结束时间”这个时间段跟以前的时间段有没有时间重叠的地方,如果有,把对应的“组织者”找出来,跟新传入的组织者对比,判断是否是同一个人。
实际上就是判断在同一时间内组织者是否有冲突的问题。
可以是SQL语句或者存储过程,不要程序包。大虾们,帮帮忙``在线等

解决方案 »

  1.   

    没看懂意思你的意思 是不是要查询这张表里面在时间段内有没有组织者???
    如果是
    select * from table a where a.name like '&name&' and to_char(a.starttime,'yyyy-mm-dd') >= to_char(开始时间,'yyyy-mm-dd') and to_char(a.endtime ,'yyyy-mm-dd') <=to_char(结果时间,'yyyy-mm-dd')
      

  2.   

    create or replace Comparison(name_In varchar2,startTime_In Date,endTime_In) as
    begin
     select t.* from organization t where ((startTime_In between startTime and endTime) or (endTime_In between startTime and endTime)) and name_In = name;
    --冲突之后的处理
    end Comparison;
      

  3.   


    --1.找出"开始时间"和"结束时间"按相同的人
    select name
    from tb_name a
    where exists(
          select 1 from tb_name b
          where a.startTime=b.startTime
            and a.endTime=b.startTime)
    --2.判断是否有重名的name--你的表有点问题,那个字段是主键,应该根据主键来判断是否该更新数据,
    --而不是人名,因为人名有重复的
      

  4.   

    DECLARE
        lv_name  VARCHAR2(80) := NAME; --传入的组织者名称
        sTime    DATE := startTime; --传入的开始日期
        eTime    DATE := endTime; --传入的结束日期
        lv_name2 VARCHAR2(80); --可能存在交叉的组织者名称
    BEGIN
        BEGIN
            SELECT NAME
            INTO lv_name2
            FROM tb_name a
            WHERE a.startTime <= eTime AND a.endTime >= sTime;
        
            IF lv_name2 = lv_name THEN
                dbms_output.put('组织者名称:' || lv_name2);
            END IF;
        EXCEPTION
            WHEN no_data_found THEN
                dbms_output.put('不存在有交叉的组织者名称');
        END IF;END;