2回目の更新:
これで、すべてのバージョンで機能するようになりました:
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
クエリ内で変数を初期化する必要があります。
更新:
奇妙なことに、これは私のローカルマシン(バージョン5.1.41-3ubuntu12.7-log)で問題なく動作しますが、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
更新の終了
このように試しましたか?
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')
)
;
私の推測では、DATE()
関数が失敗します。varchar
になります (そうですか?)日付はISO形式ではありません。したがって、STR_TO_DATE()
を使用する必要があります 機能。
STR_TO_DATE()
の正確な使用法について こちらをお読みください および