选择*匹配当前日期比现在大,当前时间大于现在

时间:2017-02-03 02:00:50

标签: php mysql sql

使用日期和时间对我来说一直是一个挑战,我已经对SE进行了大量有关mysql日期查询的研究,但没有找到任何具体的东西来帮助解决我的问题。

我在app上工作,需要显示所有尚未过期的匹配项,匹配项已于过期日期到期且时间过去

示例:

即使今天的比赛日提供时间尚未过去,比赛仍然可以激活......我想你明白我的意思?

以上是难点部分的简单部分。

我可以去:

SELECT * FROM matches WHERE match_date >= CURDATE();

我的问题

  • 如何修改上述查询包含时间函数
  • 您是否会说上述有关DATE的查询是我可以用于实现目标的最佳/最有效的查询?

任何帮助/建议表示赞赏

2 个答案:

答案 0 :(得分:5)

我认为这可以满足您的需求:

SELECT *
FROM matches
WHERE match_date > CURDATE() OR
      ( match_date = CURDATE() and match_time > CURTIME() );

注意:您应该将日期和时间存储在单个字段中。然后你可以这样做:

SELECT m.*
FROM matches m
WHERE match_datetime >= now();

更简单。并且更有可能使用索引。

答案 1 :(得分:1)

您可以将DATETIMETIMESTAMP()功能结合使用。

SELECT * FROM matches WHERE TIMESTAMP(match_date, match_time) >= NOW()

要使用至少match_date的索引,您可以添加冗余条件match_date >= CURDATE()

SELECT * 
FROM matches 
WHERE match_date >= CURDATE()
  AND TIMESTAMP(match_date, match_time) >= NOW()

第一个条件将使用索引忽略今天之前的所有内容。

如果您使用DATETIME或TIMESTAMP列,其他已经提到的事情会变得更容易。如果您使用MySQL 5.7.6(或更高版本),您还可以创建computed/generated column并将其编入索引。

相关问题