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

也就是说,指定范围内的所有日期。

有任何想法吗?

4

1 回答 1

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

参考帖

于 2013-02-24T15:45:23.783 回答