2015-10-07 11 views
5

SQLite'de '2015-10-02' ile '2015-11-02' arasındaki tüm tarihleri ​​nasıl alabilirim? Bu değil yaklaşık SELECT * FROM myTable where myDate <= '2015-01-01' AND myDate >= '2015-01-31' bir sorudurİki tarih arasındaki tüm tarihler nasıl oluşturulur?

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

: gibi (String türü) Sonucu olacaktır. Bu, iki gün arasında bir alana sahip olan tüm mevcut kayıtlarının seçilmesiyle ilgili değil değil. Sadece iki tarih arasındaki olası tüm tarih değerlerini almak istiyorum. Kayıt sayısını gün sayısına göre sorgulamak için kullanmak istiyorum.

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

Olası kopyalar [SQLite tarihleri ​​karşılaştırmak] (http://stackoverflow.com/questions/13091000/sqlite-compare-dates) –

+0

http://stackoverflow.com/questions/7812986/easiest-way- -sabit-a-temp-tablo-ile-tarih-arasında-ve-dahil-2-date-par ilgili görünüyor, ama ben SQL Server ve SQLite arasındaki olası lehçe farklılıkları değilim. –

+0

Lütfen aşağıda verilen cevabı gözden geçirin, teşekkürler. –

cevap

9

:

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; 
ait
+0

Aradığım şey bu. Çok teşekkürler – Andiana

0

tarih sütunu zaten YYYY-MM-DD sonra aşağıdaki sorguyu kullanabilirsiniz biçiminde bir tarih türü ise: tarih sütunu aslında bir dize ise

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 

, o zaman strftime() kullanabilirsiniz fonksiyonu: Bu SQLite'ta 3.8.3 kullanılmaya başlanan bir özyinelemeli common table expression olmadan mümkün değildir

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

Bu sadece bir tablodaki * mevcut kayıtları seçer * kritere uyuyor, oysa soru, kriterlere uyan uygun aralıklarla aralıklı tüm olası tarihler kümesini * doldurmak istiyor gibi görünüyor. –

+0

Düzenlemeden önce _before_ yanıtını verdim. Lütfen indirimi kaldırın. Güncellemeye çalışacağım, bunu silemem, teşekkürler. Ben cevap verdikten sonra soruyu tamamen değiştirdi. –