MySQL 查询显示下个月内的所有小时

标签 mysql database function date

我如何组合一个查询来显示下周的所有时间,因为我想将时间表与此进行比较以用于预约目的。

感谢您的帮助!

编辑--

预期结果在 9 到 5 之间就很好

|客户日期 | client_time |
2010年10月1日 09:00:00
2010年10月1日 10:00:00
2010年10月1日 11:00:00
2010年10月1日 12:00:00
2010年10月1日 13:00:00
2010年10月1日 14:00:00
2010年10月1日 15:00:00
2010年10月1日 16:00:00
2010年10月1日 17:00:00

最佳答案

您需要创建一个表来存储日期和时间值。

CREATE TABLE calendarhours (caldaytime DATETIME);    

然后,您需要创建一个存储过程来循环这两个日期,并将时间表时间的日期时间值插入表中。

DELIMITER $$    

CREATE DEFINER=`root`@`localhost` PROCEDURE `timesheetdays`(startdate DATETIME, enddate DATETIME)    
BEGIN    
    DECLARE tempdate DATETIME;    


    DELETE FROM `calendarhours`;    

    -- set the temp date to 9am of the start date     
    SET tempdate = DATE_ADD(DATE(startdate), INTERVAL '0 9' DAY_HOUR);     

    -- while the temp date is less than or equal to the end date, insert the date    
    -- into the temp table    
    WHILE ( tempdate <= enddate ) DO    
        BEGIN    
            -- insert temp date into temp table    
            INSERT INTO `calendarhours` (caldaytime) VALUES (tempdate);    
            -- increment temp date by an hour    
            SET tempdate = DATE_ADD(tempdate, INTERVAL '0 1' DAY_HOUR);    

            -- if the temp date is greater than 5 PM (17:00) then increment to the next day    
            IF TIMEDIFF(tempdate, DATE_ADD(DATE(tempdate), INTERVAL '0 17' DAY_HOUR)) > 0 THEN    
                BEGIN    
                    -- increment to the next day    
                    SET tempdate = DATE_ADD(DATE(tempdate), INTERVAL '1 9' DAY_HOUR);     
                    -- for business purposes, if the day is a Saturday or a Sunday increment     
                    -- until we reach Monday    
                    WHILE ( DAYNAME(tempdate) = 'Saturday' OR DAYNAME(tempdate) = 'Sunday' ) DO    
                        BEGIN    
                            SET tempdate = DATE_ADD(DATE(tempdate), INTERVAL '1 9' DAY_HOUR);     
                        END;    
                    END WHILE;    
                END;    
            END IF;    
        END;    
    END WHILE;    

    -- return all the inserted date and times    
    SELECT * FROM calendarhours ORDER BY caldaytime;    

END    

此过程将循环遍历两个日期,从每天上午 9 点开始,到每天下午 5 点 (17:00) 结束。当时间到达 18:00 时,该过程将递增到第二天,并在上午 9 点再次开始。

如果您正在制作标准工作周时间表,那么如果该天等于星期六或星期日,它将递增,直到到达星期一。

为了测试这一点,我使用了以下语句:

CALL `timesheetdays`(NOW(), DATE_ADD(DATE(NOW()), INTERVAL '5 0' DAY_HOUR));    
SELECT * FROM `calendarhours`;    

这会测试从今天到今天后 5 天的程序,并根据需要显示时间。第一个语句将记录添加到表中,然后返回记录,第二个语句从表中返回记录。

关于MySQL 查询显示下个月内的所有小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8859611/

相关文章:

php - 如何访问 cpanel 服务器中的数据库?

c++ - 如何用c++代码调用matlab自定义函数

function - elisp 中的缓冲区局部函数

php - Codeigniter 隐藏窗体变为 NULL

php - 我可以重用装饰器吗?

python - Django 抛出不正确的数据库配置错误

MySql 主键不是 int

function - 如何在vba函数中打开另一个窗体并返回到该函数

mysql - 关系数据库如何获取未索引的列?

java - 将数据从数据库添加到 JavaFX TableView 的最流畅方式