Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comparaison des colonnes de date de la table avec une liste de dates générée - MYSQL

Deuxième MISE À JOUR :

Maintenant, je l'ai fait fonctionner dans toutes les versions :

select
*
from
Payroll
inner join 
(
SELECT DATE(DATE_ADD('2012-10-05', 
INTERVAL @i:[email protected]+14 DAY) ) AS dateP
FROM Payroll, (SELECT @i:=0) r
where @i < DATEDIFF(now(), date '2012-10-05') 
) sq on Payroll.datestamp = sq.dateP

Il vous suffit d'initialiser la variable à l'intérieur de la requête.

MISE À JOUR :

Chose étrange, celui-ci fonctionne sur ma machine locale sans problème (version 5.1.41-3ubuntu12.7-log), mais pas dans votre SQLfiddle.

set @i:= 0;
select
*
from
Payroll
inner join 
(
SELECT DATE(DATE_ADD('2012-10-05', 
INTERVAL @i:[email protected]+14 DAY) ) AS dateP
FROM Payroll
where @i < DATEDIFF(now(), date '2012-10-05') 
) sq on Payroll.datestamp = sq.dateP

FIN DE LA MISE À JOUR

Avez-vous essayé comme ça ?

set @i:= 0;

SELECT distinct datestamp FROM payroll
WHERE STR_TO_DATE(datestamp, '%M, %d %Y %H:%i:%f') in (
SELECT DATE(ADDDATE('2012-10-05', 
INTERVAL @i:[email protected]+14 DAY) ) AS dateP
FROM payroll
where @i < DATEDIFF(now(), date '2012-10-05') 
)
;

Je suppose que le DATE() la fonction échoue, car vous êtes varchar (n'est-ce pas ?) La date n'est pas au format ISO. Par conséquent, vous devez utiliser STR_TO_DATE() fonction.

Pour une utilisation exacte de STR_TO_DATE() lire ici et ici . Je ne suis pas sûr de la partie microseconde.