比较时间范围

时间:2009-07-13 13:23:12

标签: sql time comparison range

我正在尝试编写一个比较时间范围的SQL语句。我从这个问题中得到了一些很好的想法:

Comparing date ranges

然而问题是跨越午夜的时间,例如给出以下开始和结束时间:

  • 19:00 - 20:00
  • 21:00 - 21:30
  • 23:00 - 01:00
  • 01:00 - 03:00

我想找到时间相交/重叠23:30 - 00:30的任何行。我只有在db和我要检查的时间范围内的行在同一天开始和结束时才能使用的代码。

我已尝试将时间转换为午夜以来的秒数,然后如果范围跨越午夜,则会在结束时间内添加86400秒。我的成功有限,但它仍然错过了一些重叠的范围。

1 个答案:

答案 0 :(得分:0)

以下是SQL SERVER中的答案 - mysql类似于

DECLARE @StartTime TIME, @EndTime TIME, @CheckTime TIME
SET @StartTime = '20:00'
SET @EndTime = '06:00'
SET @CheckTime = '22:59'

IF @StartTime <= @EndTime
BEGIN
    --same day eg 6pm - 11pm
    IF @CheckTime >= @StartTime AND @CheckTime <= @EndTime
        SELECT 'True'
    ELSE
        SELECT 'False'
END
ELSE
BEGIN
    --overlaps midnight
    IF @CheckTime >= @EndTime OR @CheckTime <= @StartTime 
        SELECT 'true'
    ELSE
        SELECT 'false'
END