0

我正在使用如下 SQL 查询:

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

现在,这实际上什么时候开始和结束?我的意思是我知道什么日期,但时间是几点,是午夜、上午 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..etc 您应该使用 DAY()

我会仔细检查 start_date 返回的内容并做出相应决定,作为参考,我会在这里查看mysql 中的日期和时间

于 2012-10-06T11:13:09.643 回答
0

如果您询问该DATE函数是如何工作的:它只是提取日期时间的日期部分。

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

这仅代表那一天。再次被视为日期时间,它将变为午夜(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 回答