如何比较给定时间表的时间从时间到时间

时间:2012-06-16 05:43:35

标签: sql sql-server sql-server-2008

如何检查SQL中给定时间间隔之间是否存在计划 更明显地揭穿

Select * 
From [Client].[scheduler] 
Where [Scheduler_Date] = '6/16/2012' 
    and ([start]<='13:06 ') 
    and ([end]>='14:31 ')

2 个答案:

答案 0 :(得分:1)

我建议避免字符串并使用time数据类型:

select * from  [Client].[scheduler] 
where [Scheduler_Date] = '20120616' and 
      (CONVERT(time,[time_from])>='11:00') and 
      (CONVERT(time,[time_to])<='13:06')

(为什么time_fromtime_to尚未time?)

我还调整了日期字符串文字以使用安全格式(yyyymmdd)


另一方面,我可能想要找到与给定端点重叠(部分或全部)的任何时间表。诀窍是切换比较:

where [Scheduler_Date] = '20120616' and 
      (CONVERT(time,[time_from])<='13:06') and 
      (CONVERT(time,[time_to])>='11:00')

这个新的WHERE子句将找到与11:00-13:06时间段重叠的任何行,而不仅仅是那些完全包含在其中的行。

答案 1 :(得分:0)

试试这个

select * 
from  [Client].[scheduler] 
where [Scheduler_Date] = '6/16/2012' and 
      (CONVERT(VARCHAR(5),[time_from],108) LIKE '11%') and 
      (CONVERT(VARCHAR(5),[time_to],108) LIKE '13:06%')