Mysql
 sql >> Database >  >> RDS >> Mysql

Tabella Confronto colonna Date con un elenco di date generato - MySQL

Secondo AGGIORNAMENTO:

Ora l'ho fatto funzionare in ogni versione:

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

Devi solo inizializzare la variabile all'interno della query.

AGGIORNAMENTO:

La cosa strana è che questo funziona sulla mia macchina locale senza problemi (versione 5.1.41-3ubuntu12.7-log), ma non nel tuo 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

FINE AGGIORNAMENTO

Hai provato così?

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') 
)
;

La mia ipotesi è che il DATE() la funzione fallisce, perché sei varchar (è vero?) la data non è in formato ISO. Quindi devi usare STR_TO_DATE() funzione.

Per l'utilizzo esatto di STR_TO_DATE() leggi qui e qui . Non sono sicuro della parte del microsecondo.