1

curdate() を使用して DB のエントリを取得しようとしていますが、認識していない根本的なロジックがいくつかあると思います。例えば:

SELECT * FROM foo WHERE event='bar' 
AND created_at >= SUBDATE(CURDATE(), 90) 
AND created_at <= CURDATE()

この呼び出しは過去 90 日間で返されますが、今日のエントリはありません。私が理解しているように、curdate() は YYYY-MM-DD または YYYYMMDD のみであり、時刻を完全に無視します。それを curtime() と now() 用に保存します。Railsで同様の呼び出しを行い、日付をDateTime.beginning_of_dayとして渡すと、他の方法では今日が特定の時間まで含まれないため、時間がここのどこかに含まれていると思われます。

MySQL リファレンス マニュアルなど、いくつかの情報源を調べましたが、本当の答えは見つかりませんでした。現在の時間の要素がクエリに含まれている可能性はありますか、それとも密室で他のビジネスが行われている可能性はありますか?

4

1 に答える 1

7

created_at列が完全なタイプの場合datetime、日付と比較すると、その日付の始まりが取得されます。

したがって、との比較は、との比較に2011-01-01似てい2011-01-01 00:00:00ます。そのため、何も返されません(タイムスタンプがその日CURDATE()の真夜中でない限り)。created_at

例:

select curdate();
-- 2011-01-31

select cast(curdate() as datetime);
-- 2011-01-31 00:00:00

select if('2011-01-31' <= curdate(), 'yep', 'not this time');
-- yep

select if('2011-01-31 00:00:01' <= curdate(), 'yep', 'not this time');
-- not this time

select if('2011-01-31 01:00:00' <= adddate(curdate(), interval 1 day), 'yep', 'not this time');
-- yep
于 2011-01-31T18:58:12.057 に答える