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;
4

5 に答える 5

15

日付と時刻の比較には、常にclopen(closed-open)間隔を使用することをお勧めします。BETWEEN(両側から)閉じた間隔を意味します。非常に良い説明は@AaronBertrandのブログ投稿にあります:BETWEENと悪魔の共通点は何ですか?。クエリを作成する方法は次のとおりです。

SELECT * 
FROM programs 
WHERE startTime >= NOW() 
  AND startTime < CURRENT_DATE() + INTERVAL 1 DAY ;
于 2012-12-06T08:07:17.907 に答える
5
SELECT * FROM programs where startTime between now() and CURRENT_DATE() + INTERVAL 1 DAY;

現在の日付は1日の始まりを返し、1日を足してその終わりに到達します。

于 2012-12-06T07:28:15.560 に答える
0

次のことを試すことができます:しかし、それは長いかもしれません。

サンプルテーブル:

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     
于 2012-12-06T08:02:56.970 に答える
0

これを試して ::

SELECT * FROM programs where startTime between now() and DATE_SUB(CURDATE(), INTERVAL 1 DAY)
于 2012-12-06T07:30:00.750 に答える
0
SELECT *
FROM   programs
WHERE  DATE(startTime) = CURRENT_DATE AND startTime > CURRENT_TIMESTAMP
于 2012-12-06T09:09:31.670 に答える