使用日期和时间对我来说一直是一个挑战,我已经对SE进行了大量有关mysql日期查询的研究,但没有找到任何具体的东西来帮助解决我的问题。
我在app上工作,需要显示所有尚未过期的匹配项,匹配项已于过期日期到期且时间过去。
示例:
即使今天的比赛日提供时间尚未过去,比赛仍然可以激活......我想你明白我的意思?
以上是难点部分的简单部分。
我可以去:
SELECT * FROM matches WHERE match_date >= CURDATE();
我的问题
任何帮助/建议表示赞赏
答案 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)
您可以将DATE
和TIME
与TIMESTAMP()
功能结合使用。
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并将其编入索引。