【发布时间】:2010-12-28 09:46:43
【问题描述】:
我的表正在使用日期时间(YYYY-MM-DD HH:MM:SS),我需要显示今天的条目。
我的代码只有:
SELECT *
FROM table
WHERE date = '$date'
ORDER BY score DESC
与
$date = date("Y-m-d");
好吧,正如预期的那样,它不起作用:|你们有解决办法吗?
【问题讨论】:
我的表正在使用日期时间(YYYY-MM-DD HH:MM:SS),我需要显示今天的条目。
我的代码只有:
SELECT *
FROM table
WHERE date = '$date'
ORDER BY score DESC
与
$date = date("Y-m-d");
好吧,正如预期的那样,它不起作用:|你们有解决办法吗?
【问题讨论】:
您的日期是“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
【讨论】:
您正在比较日期时间和日期表达式,这就是它不起作用的原因。使用 Date() 方法从 datetime 返回日期部分,然后进行比较。 WHERE DATE(date) = '$date' 应该这样做。您可能必须使用别名来处理这种名称冲突。
【讨论】:
按照 Pascal Martin,您可以从日期+时间字段中提取日期部分:
SELECT * FROM table WHERE DATE(date) = '2009-12-19'
Source: MySQL - Date and Time Functions
但是请注意,此查询不会在您的日期+时间字段上使用索引(如果您将拥有一个)。 (Stack Overflow: How does one create an index on the date part of DATETIME field in MySql)
【讨论】: