2017-08-24 76 views
0

我有一個返回日期的查詢,讓我們使用CURRENT_DATE作爲一個例子:添加小時迄今爲止在MySQL查詢結果

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

感謝您的回覆。我嘗試了這個程序,但我用一個更簡單的解決方案解決了問題。我創建了數字的附配表aux_hour從0到23在我的例子的soltution將是:

SELECT CURRENT_DATE, 小時 FROM aux_hour;

這對我很有幫助,但感謝您的回答,提示我瞭解了更多關於它們的程序,所以再次感謝您。

+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不允許一個函數返回一個表,所以你不能有形式的東西SELECT * FROM GetAllHoursInDay。但是,您可以通過創建一個臨時表來避開這個問題,使用上述過程填充它,然後從可執行文件中執行SELECT *。