日期+时间段的查询(50分)

  • 主题发起人 主题发起人 ntjrr
  • 开始时间 开始时间
N

ntjrr

Unregistered / Unconfirmed
GUEST, unregistred user!
where ((收费日期=:Date1) and (收费时间>:Time1))or((收费日期>:Date1)and(收费日期<:Date2))or((收费日期=:Date2)and(收费时间<:Time2))
要实现的功能是从某一天的某个时间,到某一天的某个时间之间的资料都查找出来,用了上面的代码,如果开始的日期和结束的日期是同一天,那么查的资料是对的,如果中间又间隔了几天,那么查找出来的资料就不对了。
 
where (收费日期 >= Date1 and 收费时间>=Time1 ) and (收费日期 <= Date1 and 收费时间<=Time1 )
 
where (收费日期 > Date1 or 收费日期 = Date1 and 收费时间>=Time1 ) and (收费日期 < Date2 or 收费日期 = Date2 and 收费时间<=Time2 )
 
where (收费日期 >= Date1 and 收费时间>=Time1 ) and (收费日期 <= Date1 and 收费时间<=Time1 )
这一条我没试,因为估计是错的,统计出来的结果,连中间的一天都会有时间段,其实中间的一天是要24小时的。
where (收费日期 > Date1 or 收费日期 = Date1 and 收费时间>=Time1 ) and (收费日期 < Date2 or 收费日期 = Date2 and 收费时间<=Time2 )
给了我较大启发,两个条件之间的AND不懂是不是笔误,是不是应该改成OR,但我试了一下,好象开始日期等于结束日期时就不对了(其它都对)
问题的难点在于,有时候开始日期等于结束日期,有时候不等于,中间的天数就要24小时的了,很多代码从表面上好象看得蛮对的,但实际测试时不懂为什么,在某种查询方式下就不对,我说的某种也就是有的中间隔一天的就会对,有的中间一隔天数就不对。
 
where ((收费日期=:Date1) and (收费时间>:Time1))or((收费日期>=:Date1+1)and(收费日期<:Date2))or((收费日期=:Date2)and(收费时间<:Time2))
我想这样应该就对了,不过那个date1+1可能要在下面的赋值里写。你试试
 
where ((收费日期=:Date1) and (收费时间>:Time1))or((收费日期>=:Date1+1)and(收费日期<:Date2 -1))or((收费日期=:Date2)and(收费时间<:Time2))
这一个我试过后同一天的时间段查询又不行了,功能相当于固定安日期来查询了。
这个好象确实蛮复杂的呢,看上去简单,从代码上来理解的话,我取个例子说,有个10:00的记录,如果查当天11:00到23:00的记录要求是查不到的,但实际上执行上述代码后会查到,因为他满足了<:Time2的要求。
 
where (收费日期 > :Date1 or 收费日期 = :Date1 and 收费时间>=:Time1 ) and (收费日期 < :Date2 or 收费日期 = :Date2 and 收费时间<=:Time2 )
这种用法是有条件的,即“收费日期”的时间部分必须为0或全相等,而“收费时间”的日期部分也应全相等,否则比较结果就不对;
上述条件中中间应该是and.
 
不知组合成 DateTime 再比较行不,这样语句就没那么复杂了吧。
 
同意liqj_
 
估计没什么好办法了,我只有先判断后再分别下SQL
 
估计一条语句有点困难了
 
多人接受答案了。
 

Similar threads

后退
顶部