2013-02-24 63 views
3

我當然可以在服務器端語言中執行此操作,但是我想知道是否可以在SQL中執行此操作。如何選擇每個日期的日期範圍

我有一個表,如:

CREATE TABLE `dates` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `date_from` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `date_to` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00', 
    PRIMARY KEY (`id`) 
); 

有了這樣

+----+---------------------+---------------------+ 
| id |  date_from  |  date_to  | 
+----+---------------------+---------------------+ 
| 1 | 2013-02-27 00:00:00 | 2013-03-01 00:00:00 | 
| 2 | 2013-02-18 00:00:00 | 2013-02-20 00:00:00 | 
+----+---------------------+---------------------+ 

一些數據(所有日期是在午夜)

我想以某種方式選擇這些獲得返回:

2013-02-27 00:00:00 
2013-02-28 00:00:00 
2013-03-01 00:00:00 
2013-02-18 00:00:00 
2013-02-19 00:00:00 
2013-02-20 00:00:00 

即,指定範圍內的所有日期。

任何想法?

+0

這個問題與填充日期間隙有關http://www.richnetapps.com/using-mysql-generate-daily-sales-reports-filled-gaps/ – 2013-02-24 15:00:18

+0

看看這裏的存儲過程: http://stackoverflow.com/questions/510012/get-a-list-of-dates-between-two-dates – aleroot 2013-02-24 15:05:31

回答

1

你可以用這個單一的查詢嘗試(它應該做的工作):

SELECT * FROM (
SELECT dates.date_from + INTERVAL a + b DAY dte 
FROM 
(SELECT 0 a UNION SELECT 1 a UNION SELECT 2 UNION SELECT 3 
    UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 
    UNION SELECT 8 UNION SELECT 9) d, 
(SELECT 0 b UNION SELECT 10 UNION SELECT 20 
    UNION SELECT 30 UNION SELECT 40) m, dates 
WHERE dates.date_from + INTERVAL a + b DAY <= dates.date_to 
ORDER BY a + b) e ORDER BY dte; 

看一看的SQL Fiddle

Reference Post

+0

這太瘋狂了。 :) – 2013-02-24 16:08:20

相關問題