0

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

比较日期范围

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

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

我想找到时间相交/重叠 23:30 - 00:30 的任何行。只有当数据库中的行和我想在同一天检查开始和结束的时间范围时,我的代码才有效。

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

4

1 回答 1

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
于 2011-12-12T02:29:27.703 回答