私は以下のようなクエリを持っています
SELECT * FROM programs where startTime between now() and now() + INTERVAL 1 DAY;
MySQLで今から今日の真夜中までの時間でクエリを書くことは可能ですか?
以下のようなもの
SELECT * FROM programs where startTime between now() and now() + midnight 12;
私は以下のようなクエリを持っています
SELECT * FROM programs where startTime between now() and now() + INTERVAL 1 DAY;
MySQLで今から今日の真夜中までの時間でクエリを書くことは可能ですか?
以下のようなもの
SELECT * FROM programs where startTime between now() and now() + midnight 12;
日付と時刻の比較には、常にclopen(closed-open)間隔を使用することをお勧めします。BETWEEN
(両側から)閉じた間隔を意味します。非常に良い説明は@AaronBertrandのブログ投稿にあります:BETWEENと悪魔の共通点は何ですか?。クエリを作成する方法は次のとおりです。
SELECT *
FROM programs
WHERE startTime >= NOW()
AND startTime < CURRENT_DATE() + INTERVAL 1 DAY ;
SELECT * FROM programs where startTime between now() and CURRENT_DATE() + INTERVAL 1 DAY;
現在の日付は1日の始まりを返し、1日を足してその終わりに到達します。
次のことを試すことができます:しかし、それは長いかもしれません。
サンプルテーブル:
ID STIME ETIME
1 December, 05 2012 05:23:00+0000 December, 05 2012 07:30:00+0000
2 December, 05 2012 10:23:00+0000 December, 05 2012 12:30:00+0000
3 December, 06 2012 22:45:00+0000 December, 07 2012 01:00:00+0000
4 December, 06 2012 22:23:00+0000 December, 06 2012 23:55:00+0000
5 December, 06 2012 20:23:00+0000 December, 06 2012 22:55:00+0000
6 December, 07 2012 10:23:00+0000 December, 07 2012 12:30:00+0000
クエリ
SELECT *,curtime() FROM prog
WHERE date(stime) = date(now())
AND date(etime) = date(now())
AND time_to_sec(SUBTIME(etime,'24:00:00')) >= 0
;
結果
ID STIME ETIME
4 December, 06 2012 22:23:00+0000 December, 06 2012 23:55:00+0000
5 December, 06 2012 20:23:00+0000 December, 06 2012 22:55:00+0000
これを試して ::
SELECT * FROM programs where startTime between now() and DATE_SUB(CURDATE(), INTERVAL 1 DAY)
SELECT *
FROM programs
WHERE DATE(startTime) = CURRENT_DATE AND startTime > CURRENT_TIMESTAMP