0

次のような SQL クエリを使用しています。

SELECT * FROM game_list 
WHERE  start_date <= DATE(NOW()) AND end_date >= DATE(NOW())
ORDER BY game_id DESC;

さて、これは実際には何時に始まり、何時に終わりますか? つまり、日付はわかっていますが、時間は何時になりますか? 午前 0 時、午前 12 時、午後、または何ですか?

4

3 に答える 3

1

私が正しく理解していれば、現在の時間が開始時間と終了時間の間にある場合にのみゲームを表示したいのですが、その場合、実際に必要なものは次のとおりです。

SELECT * FROM game_list 
WHERE  DATE(NOW()) >= start_date AND DATE(NOW()) <= end_date 
ORDER BY game_id DESC;

このようにすれば正しく動作するはずです。私が見ることができる唯一の問題は、start_date と end_date を正しくフォーマットしない場合です。

  • 値が完全なタイム スタンプの場合、日付と時刻の両方が含まれているため、NOW() または CURRENT_TIMESTAMP を直接使用する必要があります。
  • start_date が年月日である場合、例: 2012-05-12 CURDATE() を使用する必要があります
  • 値が 1...2...3...4.. などの単純な日付の場合は、DAY() を使用する必要があります。

start_date が返すものを再確認し、それに応じて決定します。参照用に、mysql でここの日付と時刻を確認します。

于 2012-10-06T11:13:09.643 に答える
0

DATE関数がどのように機能するかを尋ねる場合: 単純に datetime の日付部分を抽出します。

http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_dateを参照してください

SELECT DATE('2003-12-31 01:02:03');
-> '2003-12-31

これは単にその日を表しています。再び datetime と見なされると、午前 0 時 (2003-12-31 00:00:00) になります。

于 2012-10-06T07:44:00.430 に答える
0

次のようなものが欲しいと思います

SELECT * FROM game_list 
WHERE  start_date <= DATE(NOW()) AND end_date >= DATE_SUB(NOW(), INTERVAL 1 DAY)
ORDER BY game_id DESC;

上記のクエリは、今日より前に開始し、終了日が明日の日付より後のレコードを取得します

于 2012-10-06T07:46:15.170 に答える