2015-10-07 101 views
5

如何檢索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://stackoverflow.com/questions/13091000/sqlite-compare-dates) –

+0

http://stackoverflow.com/questions/7812986/easiest-way-在日期和日期之間填充日期範圍看起來相關,但我沒有考慮SQL Server和SQLite之間可能的方言差異。 –

+0

請查看下面給出的答案,謝謝。 –

回答

9

這是不可能的,而不遞歸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

0

如果你的日期列已經是一個日期類型的格式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。我會嘗試更新它,我不能刪除它,謝謝。我回答後完全改變了這個問題。 –

相關問題