curdate()を使用してDB内のエントリを取得しようとしていますが、私が認識していない基本的なロジックがあると思います。たとえば:MySQLでの比較でのcurdate()の動作
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リファレンスマニュアルを含むいくつかのソースをチェックアウトしましたが、本当の答えは出ていません。現在の時間の要素がクエリに含まれている可能性はありますか、それとも閉鎖されている他のビジネスがあるのでしょうか?
1:疑いで、列のデータ型を確認する - MySQLはDATEがあり、DATETIME。 –
明らかにその列はTIMESTAMPであり、私が読んでいるところでは、TIMESTAMPに対応しようとする前に列をDATETIMEに変更する必要があるようです。それが正確だとお考えですか? – keybored
@keybored。正確に - それを 'DATE'と比較しています。 'DATE'と' TIMESTAMP'を比較すると、その日の始めに真夜中(0時間、0分、0秒)と仮定されます。 'TIMESTAMP'と' TIMESTAMP'を比較するか、 'DATE'の間にレコードを取得するために' adddate'のようなものを使うかのどちらかです。 – jerhinesmith