如何生成两个日期之间的所有日期

问题描述:

如何检索SQLite中'2015-10-02'到'2015-11-02'之间的所有日期? (字符串型) 结果将是这样的:如何生成两个日期之间的所有日期

'2015-10-03' 
'2015-10-04' 
'2015-10-05' 
... 
'2015-11-01' 

这是不一个SELECT * FROM myTable where myDate <= '2015-01-01' AND myDate >= '2015-01-31'问题。这是而不是关于选择所有现有的记录有两天之间的字段。我只想在两个日期之间检索所有可能的日期值。我想用它们来查询记录的天数。

Date    Count 
'2015-01-01'  19 
'2015-01-02'  10 
'2015-01-03'  0 
... 
+1

的可能的复制[SQLite的比较日期(http://*.com/questions/13091000/sqlite-compare-dates) –

+0

http://*.com/questions/7812986/easiest-way-在日期和日期之间填充日期范围看起来相关,但我没有考虑SQL Server和SQLite之间可能的方言差异。 –

+0

请查看下面给出的答案,谢谢。 –

这是不可能的,而不递归common table expression,将其在SQLite的3.8.3介绍:

WITH RECURSIVE dates(date) AS (
    VALUES('2015-10-03') 
    UNION ALL 
    SELECT date(date, '+1 day') 
    FROM dates 
    WHERE date < '2015-11-01' 
) 
SELECT date FROM dates; 
+0

这是我一直在寻找的东西。非常感谢 – Andiana

如果你的日期列已经是一个日期类型的格式YYYY-MM-DD那么你可以使用下面的查询:

SELECT date_field AS Date, COUNT(date_field) 
FROM table 
WHERE (date_field BETWEEN '2015-10-02' AND '2015-11-02') 
GROUP BY date_field 

如果日期栏居然是一个字符串,那么你可以使用strftime()功能:

SELECT date_field AS Date, COUNT(date_field) 
FROM table 
WHERE strftime('%Y-%m-%d', date_field) BETWEEN '2015-10-02' AND '2015-11-02' 
GROUP BY date_field 
+0

这只会选择表格中的*现有记录以符合标准,而问题似乎是要求*填充一组所有可能的日期,并以合适的间隔*符合标准。 –

+0

我回答了_before_编辑。请删除downvote。我会尝试更新它,我不能删除它,谢谢。我回答后完全改变了这个问题。 –