我有一个返回日期的查询,让我们以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.我需要这个,因为我每天会有不同的约会,而且我试图避免创建一个包含所有日期和时间的表格。
答案 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;
这对我有用,但是由于你的答案提示程序我学到了更多关于他们的信息,所以再次感谢你。