2015-10-07 19 views
5

Come posso recuperare tutte le date tra '2015-10-02' a '2015-11-02' in SQLite? (String type) risultato sarà simile:Come generare tutte le date tra due date

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

Questo è non una domanda su SELECT * FROM myTable where myDate <= '2015-01-01' AND myDate >= '2015-01-31'. Questo è non sulla selezione di tutti gli record esistenti che hanno un campo tra due giorni. Voglio solo recuperare tutti i possibili valori di data tra due date. Voglio usarli per interrogare il conteggio dei record per giorni.

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

Eventuali duplicati di [SQLite confrontare date] (http://stackoverflow.com/questions/13091000/sqlite-compare-dates) –

+0

http://stackoverflow.com/questions/7812986/easiest-way- to-populate-a-temp-table-con-date-between-and-including-2-date-par sembra rilevante, ma non sono disponibile sulle possibili differenze di dialetto tra SQL Server e SQLite. –

+0

Si prega di rivedere la risposta data sotto, grazie. –

risposta

9

Ciò non è possibile senza una ricorsiva common table expression, che è stato introdotto in 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

Questa è la cosa che stavo cercando. Grazie mille – Andiana

0

Se la colonna data è già un tipo di data con il formato YYYY-MM-DD quindi è possibile utilizzare la seguente query:

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 

Se la colonna della data è in realtà una stringa, quindi è possibile utilizzare il strftime() funzione:

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

Questo seleziona solo * i record esistenti in una tabella * che corrisponde al criterio, mentre la domanda sembra chiedere * il popolamento di un insieme di tutte le date possibili intervallate da intervalli appropriati * che soddisfano il criterio. –

+0

Ho risposto _prima_ la modifica. Si prega di rimuovere il downvote. Cercherò di aggiornarlo, non posso cancellarlo grazie. Ha completamente cambiato la domanda dopo che ho risposto. –