0

テーブルに日付と時刻の列があります。現在の時刻に 1 時間を加えた日付と時刻を持つすべてのオブジェクトを選択したい:

私は次のことを試しました:

SELECT * FROM mytable WHERE date >= CURDATE() AND time >= TIME(NOW()+INTERVAL 1 hour)

しかし、これは論理的に正しくありません。日付が明日で、時刻が現在の HH:MM よりも小さい場合、そのレコードは選択されません。日付と時刻を使用して現在の日時と比較するにはどうすればよいですか? 私はmysqlでphp 5.2を使用しています

4

6 に答える 6

1

まず、日付が今日かどうか、時間が現在の時間よりも大きいかどうかを確認します。2 番目の条件は、日付が現在の日付よりも大きいかどうかを確認することです。日付が現在の日付よりも大きい場合、自動的に時間が進んでいるためです。

SELECT * FROM mytable
WHERE (date = CURDATE() AND time >= TIME(NOW() + INTERVAL 1 hour))
OR date > CURDATE()
于 2013-04-21T10:16:36.653 に答える
0

あなたはこれを行うことができます。

SELECT 
* 
FROM
mytable 
WHERE 
CONCAT( date, " ", time ) > (NOW() + INTERVAL 1 HOUR );

個人的には、日付と時刻の個別のフィールドを取り除き、統合された「DATETIME」フィールドを作成することをお勧めします。そのフィールドに INDEX を追加することもお勧めします。

これにより、クエリが改善され、高速になります。:)

于 2013-04-21T12:50:44.103 に答える
0

@Pekka で示されているように、これまでに投稿されたすべての回答は、午後 11 時から午前 0 時の間に間違った回答を返します。私は MySQL を扱っていませんが、調べることはできます。より良いアプローチは、timestamp() 関数のようです。

このリファレンスには次のように記載されています。

With two arguments, it adds the time expression expr2 to the date 
or datetime expression expr1 and returns the result as a datetime value. 

2 つの引数で timestamp() を使用しないのはなぜですか?

于 2013-04-21T11:59:15.880 に答える