在mysql查询结果中添加到目前为止的小时

时间:2017-08-24 14:09:28

标签: mysql sql database

我有一个返回日期的查询,让我们以current_date为例:

SELECT
current_date();

我想修改此查询以返回类似:

的内容
Date         |  Hour
2017-08-24       0
2017-08-24       1
2017-08-24       2
2017-08-24       3
2017-08-24       4
...

一直到23.我需要这个,因为我每天会有不同的约会,而且我试图避免创建一个包含所有日期和时间的表格。

2 个答案:

答案 0 :(得分:1)

您可以做的是编写存储过程以生成给定日期的所有小时数。例如:

delimiter $$
CREATE PROCEDURE GetAllHoursInDay
(
    in in_date date
) 
BEGIN
SELECT convert (in_date, datetime)
UNION
SELECT in_date + interval 1 hour
UNION
SELECT in_date + interval 2 hour
UNION
SELECT in_date + interval 3 hour
UNION
SELECT in_date + interval 4 hour
UNION
SELECT in_date + interval 5 hour
UNION
SELECT in_date + interval 6 hour
UNION
SELECT in_date + interval 7 hour
UNION
SELECT in_date + interval 8 hour
UNION
SELECT in_date + interval 9 hour
UNION
SELECT in_date + interval 10 hour
UNION
SELECT in_date + interval 11 hour
UNION
SELECT in_date + interval 12 hour
UNION
SELECT in_date + interval 13 hour
UNION
SELECT in_date + interval 14 hour
UNION
SELECT in_date + interval 15 hour
UNION
SELECT in_date + interval 16 hour
UNION
SELECT in_date + interval 17 hour
UNION
SELECT in_date + interval 18 hour
UNION
SELECT in_date + interval 19 hour
UNION
SELECT in_date + interval 20 hour
UNION
SELECT in_date + interval 21 hour
UNION
SELECT in_date + interval 22 hour
UNION
SELECT in_date + interval 23 hour;
END$$
DELIMITER ;

然后你可以调用它,例如由:

call GetAllHoursInDay(current_date());

不是AFAIK MySQL不允许FUNCTION返回表格,所以你不能拥有SELECT * FROM GetAllHoursInDay形式的东西。但是,您可以通过创建临时表来解决此问题,使用上述过程填充它,然后从temptable执行SELECT *。

答案 1 :(得分:0)

感谢您的回复。我尝试了这个程序,但我找到了一个更简单的解决方案。我创建了一个辅助表aux_hour,数字从0到23.在我的例子中,解决方案是:

选择        当前的日期,        小时    来自aux_hour;

这对我有用,但是由于你的答案提示程序我学到了更多关于他们的信息,所以再次感谢你。