sql >> Databáze >  >> RDS >> Mysql

Porovnání sloupců tabulky Datum s vygenerovaným seznamem dat - MYSQL

Druhá AKTUALIZACE:

Teď mi to funguje ve všech verzích:

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

Stačí inicializovat proměnnou uvnitř dotazu.

AKTUALIZACE:

Zvláštní je, že tento funguje na mém místním počítači bez problémů (verze 5.1.41-3ubuntu12.7-log), ale ne ve vašem 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

KONEC AKTUALIZACE

Zkoušeli jste to takto?

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

Můj odhad je, že DATE() funkce selže, protože jste varchar (je to?) datum není ve formátu ISO. Proto musíte použít STR_TO_DATE() funkce.

Pro přesné použití STR_TO_DATE() přečtěte si zde a zde . Nejsem si jistý tou mikrosekundovou částí.




  1. Přidejte dny k datu v SQLite

  2. Postgres – Převeďte seznam sousedství na vnořený objekt JSON

  3. Zdrojový formát SSIS Implicitní převod pro datum a čas

  4. Omezte celočíselnou hodnotu pro sloupec mysql