我的表格使用了日期时间格式 (YYYY-MM-DD HH:MM:SS)
,我想要展示今天的记录。
我的代码只有:
SELECT *
FROM table
WHERE date = '$date'
ORDER BY score DESC
使用
$date = date("Y-m-d");
好的,正如预期的那样,它不起作用 :| 你们这里有解决方案吗?
根据 Pascal Martin 的建议,您可以从日期+时间字段中提取日期部分:
SELECT * FROM table WHERE DATE(date) = '2009-12-19'
需要注意的是,如果您有一个日期+时间字段,则此查询将不会使用该字段上的索引。 (Stack Overflow: 如何在 MySQL 的 DATETIME 字段中创建日期部分的索引?)
您的日期是“2009-12-19”(或类似的日期,具体取决于日期),它被解释为“2009-12-19 00:00:00”。
在您的数据库中,您可能没有一个完全等于该时间的日期,因为您的日期可能长这样:“2009-12-19 12:15:32”。
解决方案是这样比较:
select *
from table
where date >= '2009-12-19'
and date < '2009-12-20'
这将被解释为:
select *
from table
where date >= '2009-12-19 00:00:00'
and date < '2009-12-20 00:00:00'
如果您不想计算出下一个日期的日期,您可以使用adddate
函数:
select *
from table
where date >= '2009-12-19'
and date < adddate('2009-12-19', interval 1 day)
select *
from table
where date >= '$date'
and date < adddate('$date', interval 1 day)
order by score desc
当你选择数据时,你可能想要格式化它:
SELECT *, DATE_FORMAT(date, '%Y-%m-%d') AS dateformat FROM table
WHERE dateformat = '$date' ORDER BY score DESC