如何使用mysql测试日期和日期时间

时间:2009-12-19 22:51:33

标签: mysql datetime date

我的桌子正在使用日期时间(YYYY-MM-DD HH:MM:SS),我需要显示今天的条目。

我的代码只有:

SELECT   * 
FROM     table 
WHERE    date = '$date' 
ORDER    BY score DESC

$date = date("Y-m-d");
好吧,正如所料,它不起作用:|你们这里有解决方案吗?

4 个答案:

答案 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'应该这样做。您可能必须使用别名来处理此名称冲突。