SQLite:获取日期之间的所有日期

时间:2013-07-09 13:07:10

标签: sql sqlite date between

我需要一些SQL(特别是:SQLite)相关问题的帮助。我有一张桌子'度假'

CREATE TABLE vacation(
    name TEXT,
    to_date TEXT, 
    from_date TEXT
);

我存储日期(YYYY-MM-DD),当有人离开度假并再次回来时。现在,我希望获得一份有关所有日期的独特列表,其中有人正在度假。我们假设我的表看起来像:

+------------+-------------+------------+
|    name    |   to_date   |  from_date |
+------------+-------------+------------+
|    Peter   | 2013-07-01  | 2013-07-10 |
|    Paul    | 2013-06-30  | 2013-07-05 |
|    Simon   | 2013-05-10  | 2013-05-15 |
+------------+-------------+------------+

查询的结果应如下所示:

+------------------------------+
| dates_people_are_on_vacation |
+------------------------------+
|          2013-05-10          |
|          2013-05-11          |
|          2013-05-13          |
|          2013-05-14          |
|          2013-05-15          |
|          2013-06-30          |
|          2013-07-01          |
|          2013-07-02          |
|          2013-07-03          |
|          2013-07-04          |
|          2013-07-05          |
|          2013-07-06          |
|          2013-07-07          |
|          2013-07-08          |
|          2013-07-09          |
|          2013-07-10          |
+------------------------------+

我考虑过使用日期表'all_dates'

CREATE TABLES all_dates(
    date_entry TEXT
);

涵盖20年的时间跨度(2010-01-01至2030-01-01)以及以下查询:

SELECT date_entry FROM all_dates WHERE date_entry BETWEEN (SELECT from_date FROM vacation) AND (SELECT to_date FROM vacation); 

但是,如果我在上面的数据集中应用此查询,我只得到了我想要的结果的一小部分:

+------------------------------+
| dates_people_are_on_vacation |
+------------------------------+
|          2013-07-01          |
|          2013-07-02          |
|          2013-07-03          |
|          2013-07-04          |
|          2013-07-05          |
|          2013-07-06          |
|          2013-07-07          |
|          2013-07-08          |
|          2013-07-09          |
|          2013-07-10          |
+------------------------------+

可以用SQLite完成吗?或者更好,如果我只返回'to_date'和'from_date'列并在我的Python应用程序中填补这些日期之间的空白?

感谢任何帮助!

1 个答案:

答案 0 :(得分:4)

您可以尝试:

SELECT date_entry 
FROM vacation 
JOIN all_dates ON date_entry BETWEEN from_date AND to_date
GROUP BY date_entry
ORDER BY date_entry