在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
);
我关注[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
);