select * from aa where starttime >= 4:00 and endtime <= 4:30 不就可以了么?

解决方案 »

  1.   

    cozmic(蓝色的猪) ( ) 信誉:100 
    是不是要求 3:55-4:05 也要保证第一条记录正确? ( 这样子第一条记录也是正确的)并且您提供的这两个时间段不能跟任何记录的时间段有交集
      

  2.   

    cozmic(蓝色的猪) ( ) 信誉:100
    是不是要求 3:55-4:05 也要保证第一条记录正确? ( 这样子第一条记录也是正确的)
    xiaohuozhi()
    并且您提供的这两个时间段不能跟任何记录的时间段有交集
    -------------
    是不是说3:55-4:35 这个时间段  所有记录为假?
      

  3.   

    cozmic(蓝色的猪) ( ) 信誉:100 
    是不是说3:55-4:35 这个时间段  所有记录为假?如果为这个时间的话,那么证明你给的这两个时间为假。其实也就是说,我要做的是一个老师排课系统,要给老师添加课程,因为课程考虑到
    时间关系和教室,所以呢,他添加的课程所安排的时间段不能跟教室还有时间有冲突。
      

  4.   

    那么如果输入的时间两个端点不在已有的时间段内,但是跨了一个时间段,又要怎么算呢?
    例如: 教室A的占用时间表为: 
    8:00---10:00
    12:00--13:00
    19:00-20:00如果时间为10:30 -- 13:30
    那么这样的话时间段两端不在其它的时间段内。但这样也是非法的!
    又要如何一起处理呢?SQL要怎么弄?呜!
      

  5.   

    只要有重叠的都要找出来。select * from table where ((starttime >=4:00 and starttime<6:00) 
    or (endtime>4:00 and endtime<=6:00))
    这样就可以了呀
      

  6.   

    如果时间为10:30(time1) -- 13:30(time2)
    输入时候判断 time1不能再0:00-8:00和11:00-12:00和17:00-24:00之间,time2不可以再0:00-8:00和17:00-24:00和time1之前就可以了
      

  7.   

    按照上面的语句只要能够查询得到纪录,就表示数据库中已经有和提供的时间段重复的时间安排了。这样就表示新排配的时间非法。如果查询没有得到纪录。就表示合法。修改一下语句。
    declare @courseint int
    select @courseint = count(*) from table where ((starttime >=4:00 and starttime<6:00) 
    or (endtime>4:00 and endtime<=6:00)) 
    if(@courseint>0)
    begin
       提供时间非法
    end
    else begin
       提供的时间合法
    end
    估计还应该有教室的问题。所以楼主在查询语句后面加上教室的条件
      

  8.   

    select count(*) from table where starttime<=time1 and endtime>=time2就可以知道是否有空教室了
      

  9.   

    再加一个条件
    按照上面的语句只要能够查询得到纪录,就表示数据库中已经有和提供的时间段重复的时间安排了。这样就表示新排配的时间非法。如果查询没有得到纪录。就表示合法。修改一下语句。
    declare @courseint int
    select @courseint = count(*) from table where ((starttime >=4:00 and starttime<6:00) 
    or (endtime>4:00 and endtime<=6:00) or (starttime<=4:00 and endtime>=6:00)) 
    if(@courseint>0)
    begin
       提供时间非法
    end
    else begin
       提供的时间合法
    end
    估计还应该有教室的问题。所以楼主在查询语句后面加上教室的条件
      

  10.   

    干嘛要这么麻烦啊
    老师添加课程总不可能添加“不合法”的时间段进去吧
    不用每次都check吧?
    只要确定添加进去的starttime和endtime没有和table里面的记录完全一样的不就行了哎,这样很损伤脑细胞啊
      

  11.   

    回复人: amorsuper(amor) ( ) 信誉:100 
    干嘛要这么麻烦啊
    老师添加课程总不可能添加“不合法”的时间段进去吧
    不用每次都check吧?
    只要确定添加进去的starttime和endtime没有和table里面的记录完全一样的不就行了哎,这样很损伤脑细胞啊---------------------------------------------------------------------------
    没办法呀,因为我们这项目要用到呀。
    教室有N个,老师也有N个呀。他们添加课程时当然不能在同一个教室里面有重叠的
    时间嘛,就像学校一样,不可能安排两门不同的课在同一个时间的同一个教室上吧!
      

  12.   

    那么如果输入的时间两个端点不在已有的时间段内,但是跨了一个时间段,又要怎么算呢?
    例如: 教室A的占用时间表为:
    8:00---10:00
    12:00--13:00
    19:00-20:00如果时间为10:30 -- 13:30
    那么这样的话时间段两端不在其它的时间段内。但这样也是非法的!
    又要如何一起处理呢?SQL要怎么弄?呜!
    ---------------
    1 那就再增加一个条件:
      对表中数据再遍历,保证其不再给出时间之间
      例如:你的例子中 给出时间为10:30 -- 13:30,
      占用表中,12:00--13:00 在这两者之间,则可判定输入非法
    这样做很费时间的,建议写成存储过程。
    2 可以给对象教室增加一个属性:占用情况位图,以10分钟为一个单位,
    0表示空闲,1表示已被占用。插入一个时间时,察看其所占用区段是否
    有1,如果有,则输入非法。
    这样做得用到Serializable 和同步机制,也是较费时间--
    不过要不是很频繁的读写,还可以忍受
      

  13.   

    回复人: amorsuper(amor) ( ) 信誉:100 
    干嘛要这么麻烦啊
    老师添加课程总不可能添加“不合法”的时间段进去吧
    不用每次都check吧?
    只要确定添加进去的starttime和endtime没有和table里面的记录完全一样的不就行了哎,这样很损伤脑细胞啊
    --------------------------------------------这位老兄,象你这样设计程序是不行地,你要考虑到各种可能。
      

  14.   

    回复人: fishkey(逆游的鱼) ( ) 信誉:100 
    ...把教室和时间做为主键.这样不就OK???
    只要有重复的就不行..
    别往牛角里钻!~~~
    ------------------------------------------
    那同一时间在不同教室的课怎么排?同一教室不同时间的课怎么排?
    考虑多点还是有必要的!
      

  15.   

    假设要测试与表中已有时间段有无冲突的时间段为 T1-T2SELECT * FROM TABLENAME WHERE    ( T1 <  STARTTIME AND T2 >= STARTTIME )
                                  OR ( T1 >= STARTTIME AND T1 <= ENDTIME   )若有记录返回,表示有冲突!
      

  16.   

    newClass表示目前正要排课的老师所占用的教室, time1表示目前正要排课的老师所占用的时间的起始时间,time2表示目前正要排课的老师所占用的时间的结束时间.class表示数据库中教室的字段名,startTime表示数据库中排课的起始时间字段名,endTime表示数据库中排课的结束时间字段名
    .select * from table where newClass in (select class from table where (startTime>=time1 and startTime<=time2) or (endTime>=time1 and endTime<=time2)) 如果此记录集不为空,则表示有冲突,不允许排课,反之,允许.