使用MySQL的时差 - 在夜间不工作后的结束时间

时间:2016-08-21 08:36:15

标签: mysql sql datetime

我想知道我目前的时间是否介于两个给定时间之间。它工作正常,除非我的结束时间在中午后 ,而我的开始时间是在白天。

例如,如果我有:

开始: 17:00

结束: 03:00

当前: 18:30

然后它不会出现。

我确实理解逻辑出错的地方,但我无法从逻辑上和概念上找到它的修复方法。我的意思是,你可以声称06:30 PM确实在05 PM到03 AM之间,但是在第二天的03 AM!

我们如何克服这个问题?

以下是我的查询:

SELECT * FROM products
        JOIN restaurants
        ON (products.Venue = restaurants.name)
        WHERE products.Drink_Category = Beer
        AND restaurants.Area = Racks 
        AND (
        HOUR(18:30) >= HOUR(products.Start) -- here is where the time is set
        AND HOUR(18:30) <= HOUR(products.End) --and here is the end
        )
        ORDER BY products.Price/products.Multiple ASC;

我已经尝试了BETWEEN查询,但它不适用于那些特定情况。

2 个答案:

答案 0 :(得分:1)

基本上,当products.Start小于SELECT * FROM products JOIN restaurants ON (products.Venue = restaurants.name) WHERE products.Drink_Category = Beer AND restaurants.Area = Racks AND ( HOUR(18:30) >= HOUR(products.Start) -- here is where the time is set AND HOUR(18:30) <= CASE WHEN products.End<products.Start THEN HOUR(products.End)+24 ELSE HOUR(products.End) END --and here is the end ) ORDER BY products.Price/products.Multiple ASC; 时,只需添加24即可计算当天换行。 E.g。

{{1}}

答案 1 :(得分:0)

你有两种方式: 1-在您的条件中使用完整日期时间值,如下所示:

Select * FROM table_event where ((SaleDate >= @FromDate) AND (SaleDate < @ToDate)) Order by SaleDate DESC

2-你可以在后端改变你的状况,如果你的结束时间到明天你必须写下这样的另一个条件:

    (HOUR(18:30) >= HOUR(products.Start) AND HOUR(23:59) <= HOUR(products.End) )
    OR
   ( HOUR(00:00) >= HOUR(products.Start) AND HOUR(3:00) <= HOUR(products.End) )