在SQL中检查时间重叠

时间:2014-07-08 16:48:55

标签: c# mysql sql .net sql-server

我正在尝试检查两个时间间隔,第一个在代码中知道两个DATETIME实例 Start_Time End_Time ,以及我从中检索的第二个时间间隔数据库,我如何在小时数相等的情况下查看会议记录,这是我想写的内容

   Select * FROM MY_TABLE 
   WHERE " ( "+ Start_Time + "<= IF(HOUR(DB_End_Time)=0, 24, HOUR(DB_End_Time) ) AND" +
         " IF(HOUR(DB_Start_Time)=0, 24, HOUR(DB_Start_Time) ) <= " + End_Time + " ) "+
         " OR "+
         " ( "+ Start_Time +"<= IF(HOUR(DB_Start_Time)=0, 24, HOUR(DB_Start_Time))AND " +
         " IF(HOUR(DB_End_Time)=0, 24, HOUR(DB_End_Time) ) <= " + End_Time+" ) ;"+

我尝试过Between和&gt; =&lt; =这样的日期时间,但它一直让我错误并要求检查sql版本!

这可以在几个小时内正常工作,任何人都知道如何包含IF语句或其他东西以使其在几分钟内正常工作!?

1 个答案:

答案 0 :(得分:1)

如果您有实际的约会时间,我认为您通过尝试隔离小时,分钟,秒等来使这太复杂。

尝试这种性质:

select *
from MY_TABLE
where @Start_Time < DB_End_Time
    and @End_Time > DB_Start_Time

这将检查任何重叠,但不会检查连续的间隔。如我所知,我不认为10-11和11-12重叠,但如果您愿意,可以将< ... >更改为<= ... >=以解释该问题。

另外,如前所述,请使用您应用中的参数化查询,而不是易受sql注入攻击的串联字符串。