在SQL服务器中获取满足两个日期范围且在特定时间范围内的数据库记录

Get database records which satisfy two date ranges and within a specific timing in SQL server

我关注[RestaurantOffer]table。 优惠,仅在两个日期范围内(即 FromDate 和 ToDate)和特定时间(FromTime,ToTime)有效。

所以我想写一个查询,它会在 当前日期(今天) 给我所有的报价,时间将超过 当前时间(今天当前时间)。因为我不想得到过期的优惠。

数据库:

FromDate(date),
ToDate(date),
FromTime(time),
ToTime(time)

更新: **注意:**此优惠并非 24 小时都有效。它仅在 FromTime-ToTime 范围内有效。 我想要什么:

1st:如果今天满足FromDate和Todate,就给我今天所有的记录 范围。

2nd : 获取今天的所有记录后,我想获取所有大于或等于今天当前时间的记录。

如果先将日期和时间字段转换为日期时间,则可以将日期和时间字段一起添加以获得日期时间。
所以

SELECT * 
FROM RestaurantOffer 
WHERE Getdate() Between 
cast(FromDate as datetime) + cast(FromTime as datetime) 
and cast(ToDate as datetime)+cast(ToTime as datetime)

尝试以下查询:

SELECT * FROM RestaurantOffer WHERE (GETDATE() >= FromDate AND GETDATE() <= ToDate) AND (cast(GETDATE() as datetime) >= FromTime AND cast(GETDATE() as datetime) <= ToTime);

试试这个:

--DROP TABLE #temp

CREATE TABLE #temp
    (
      FROMDate DATE
    , ToDate DATE
    , FromTime TIME
    , ToTime TIME
    );

INSERT  INTO #temp
        ( FROMDate, ToDate, FromTime, ToTime )
VALUES  ( '2016-05-01'  -- FROMDate - date
          , '2016-06-01'  -- ToDate - date
          , '11:30:00:000'  -- FromTime - time
          , '17:30:00:000'  -- ToTime - time
          ),
        ( '2016-05-01'  -- FROMDate - date
          , '2016-06-01'  -- ToDate - date
          , '11:30:00:000'  -- FromTime - time
          , '17:30:00:000'  -- ToTime - time
          ),
        ( '2016-05-01'  -- FROMDate - date
          , '2016-06-01'  -- ToDate - date
          , '11:30:00:000'  -- FromTime - time
          , '17:30:00:000'  -- ToTime - time
          ),
        ( '2016-05-01'  -- FROMDate - date
          , '2016-06-01'  -- ToDate - date
          , '11:30:00:000'  -- FromTime - time
          , '19:30:00:000'  -- ToTime - time
          );

SELECT  FROMDate
      , ToDate
      , FromTime
      , ToTime
FROM    #temp
WHERE   ( CAST(GETDATE() AS DATE) >= FROMDate
          AND CAST(GETDATE() AS DATE) <= ToDate
        )
        AND ( CAST(GETDATE() AS TIME) >= FromTime
              AND CAST(GETDATE() AS TIME) <= ToTime
            );