Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MySQL的时差-午夜后结束时间不工作_Mysql_Sql_Datetime - Fatal编程技术网

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

使用MySQL的时差-午夜后结束时间不工作,mysql,sql,datetime,Mysql,Sql,Datetime,我试图弄清楚我当前的时间是否介于两个给定的时间之间。它工作正常,除非我的结束时间在午夜之后,而我的开始时间在白天 例如,如果我有: 开始时间:17:00 完二〇〇三时 当前时间:18:30 然后它就不会出现了 我确实理解逻辑哪里出了问题,但我无法从逻辑和概念上找到解决办法。我的意思是,你可以说下午6:30确实在下午5点到凌晨3点之间,但是第二天凌晨3点 我们如何克服这个问题 以下是我的问题: SELECT * FROM products JOIN restaurants

我试图弄清楚我当前的时间是否介于两个给定的时间之间。它工作正常,除非我的结束时间在午夜之后,而我的开始时间在白天

例如,如果我有:

开始时间:17:00

完二〇〇三时

当前时间:18:30

然后它就不会出现了

我确实理解逻辑哪里出了问题,但我无法从逻辑和概念上找到解决办法。我的意思是,你可以说下午6:30确实在下午5点到凌晨3点之间,但是第二天凌晨3点

我们如何克服这个问题

以下是我的问题:

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;
我也尝试过中间查询,但它不适用于那些特定的情况

基本上,当产品.结束比产品.开始小时,只需加上24就可以了。例如

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;
你有两条路: 1-在如下情况下使用完整的日期时间值:

Select * FROM table_event where ((SaleDate >= @FromDate) AND (SaleDate < @ToDate)) Order by SaleDate DESC
    (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) )
2-您可以在后端更改您的条件,如果您的结束时间为明天,您必须编写另一个类似于以下内容的条件:

Select * FROM table_event where ((SaleDate >= @FromDate) AND (SaleDate < @ToDate)) Order by SaleDate DESC
    (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) )

那是什么SQL方言?@Lucero,它相当于MySQL,刚刚编辑过。它不仅起作用,而且很成功。真是个问题,谢谢你,伙计@从任务描述来看,我的假设是否定的,因为它是一天中的特定时间范围,因此它是独立于日期的,因此24小时对于包装来说是正确的。新浪,如果我错了,请纠正我@草莓,我理解你的担忧,但我唯一的案例是介于17:00到22:00之间,或17:00到03:00之间,使用上面的查询,哪两个场景可以得到满足。谢谢你们两位的帮助: