【问题标题】:Check Time Overlap In SQL在 SQL 中检查时间重叠
【发布时间】:2014-08-29 12:27:09
【问题描述】:

我正在尝试检查两个时间间隔,第一个在代码中知道为两个 DATETIME 实例 Start_TimeEnd_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 和 >=

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

【问题讨论】:

  • 你得到什么错误?
  • mysql 还是 sql-server?并发布网络查询。不要让我们尝试从中解析出 tsql。
  • 别忘了:使用参数化查询

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


【解决方案1】:

如果您有实际的日期时间可以使用,我认为您尝试隔离小时、分钟、秒等会使事情变得过于复杂。

试试这种性质的东西:

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

这将检查任何重叠,但不会检查连续的间隔。例如,我不认为 10-11 和 11-12 重叠,但如果您愿意,可以将 &lt; ... &gt; 更改为 &lt;= ... &gt;= 以解决此问题。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多