Je veux que la liste des dates se situe entre deux dates en sélectionnant la requête. Par exemple:
Si je donne '2012-02-10' et '2012-02-15' j'ai besoin du résultat.
date
----------
2012-02-10
2012-02-11
2012-02-12
2012-02-13
2012-02-14
2012-02-15
Comment puis-je avoir?
Essayer:
select * from
(select adddate('1970-01-01',t4.i*10000 + t3.i*1000 + t2.i*100 + t1.i*10 + t0.i) selected_date from
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
(select 0 i union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v
where selected_date between '2012-02-10' and '2012-02-15'
-à ce jour s'étend sur près de 300 ans dans le futur.
[Corrigé après une modification suggérée par UrvishAtSynapse.]
set @i = -1;
SELECT DATE(ADDDATE('2012-02-10', INTERVAL @i:=@i+1 DAY)) AS date FROM `table`
HAVING
@i < DATEDIFF('2012-02-15', '2012-02-10')
Cela retournera votre jeu de résultats exactement comme prescrit. Cette requête nécessite uniquement que vous changiez les deux dates différentes en dateiff et adddate.
La réponse acceptée n'a pas fonctionné pour moi dans MySQL 5.5. J'ai mis à jour la requête pour qu'elle fonctionne pour moi:
select * from
(select adddate('1970-01-01',t4*10000 + t3*1000 + t2*100 + t1*10 + t0) selected_date from
(select 0 t0 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t0,
(select 0 t1 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t1,
(select 0 t2 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t2,
(select 0 t3 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t3,
(select 0 t4 union select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9) t4) v
where selected_date between '2012-02-10' and '2012-02-15'
Vous pouvez créer un tableau contenant toutes les dates que vous pourriez avoir besoin d'utiliser:
date
2000-01-01
2000-01-02
2000-01-03
...etc..
2100-12-30
2100-12-31
Recherchez ensuite cette table comme suit:
SELECT date
FROM dates
WHERE date BETWEEN '2012-02-10' AND '2012-02-15'
Jetez un oeil à ce post: Obtenez une liste de dates entre deux dates
Vérifiez la procédure stockée que Ron Savage a fait, cela semble correspondre à ce dont vous avez besoin!