我的桌子正在使用日期时间(YYYY-MM-DD HH:MM:SS)
,我需要显示今天的条目。
我的代码只有:
SELECT *
FROM table
WHERE date = '$date'
ORDER BY score DESC
带
$date = date("Y-m-d");
好吧,正如所料,它不起作用:|你们这里有解决方案吗?
答案 0 :(得分:11)
根据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)
答案 1 :(得分:4)
您的约会日期是“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
答案 2 :(得分:0)
您可能希望在选择数据时格式化数据:
SELECT *, DATE_FORMAT(date, '%Y-%m-%d') AS dateformat FROM table
WHERE dateformat = '$date' ORDER BY score DESC
答案 3 :(得分:0)
您正在比较日期时间和日期表达式,这就是它无法正常工作的原因。使用Date()方法从datetime返回日期部分,然后进行比较。 WHERE DATE(date)='$ date'应该这样做。您可能必须使用别名来处理此名称冲突。