2009-12-19 67 views
0

我的表格使用日期时间(YYYY-MM-DD HH:MM:SS),我需要显示今天的条目。如何使用mysql测试日期和日期时间

我的代码只是:

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

$date = date("Y-m-d"); 

良好,预期它不工作:|你们在这里有一个解决方案?

回答

8

帕斯卡尔·马丁之后,你可以提取日期部分从日期+时间字段:

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

+0

这是最好的方式来做到这一点=)thx很多 – 2009-12-19 23:02:42

+1

如果我没有弄错,像这样的解决方案,其中有一个“日期”列计算,计算/转换必须在表格的每一行上进行 - 破坏了使用可能在“日期”列中设置的索引的机会。 – 2009-12-19 23:02:52

+0

@帕斯卡尔:是的,我认为是。我在答案中加入了澄清......与此同时,我正在检查MySQL如何处理这个问题,因为好奇。 – 2009-12-19 23:06:48

3

你的日期是“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 
+0

是不是有一个更美丽的选项来写呢? thx无论如何,这本来会花费一些思考 – 2009-12-19 22:59:05

+1

胡;我想我不同意“美丽”的定义,我想 - 至少,我不认为这看起来“丑陋”,但是,呃......;这个解决方案的一个优点是它应该使用你在“日期”列中的索引,如果你有一个(也许你应该)),而一个解决方案转换“日期”列或做一个计算在它将消除使用索引的abolity。 – 2009-12-19 23:01:17

+0

你的指数是什么意思? 和由美丽,我发现丹尼尔Vassallo更干净的解决方案 – 2009-12-19 23:04:15

0

你可能想,当你选择它格式化数据:

SELECT *, DATE_FORMAT(date, '%Y-%m-%d') AS dateformat FROM table 
WHERE dateformat = '$date' ORDER BY score DESC 
+0

其显示unknows列名dateformat – 2017-03-25 12:28:07

0

您比较日期时间和日期的表达,这就是为什么它不工作。使用Date()方法从datetime返回日期部分,然后进行比较。 WHERE DATE(date)='$ date'应该这样做。您可能必须使用别名来处理此名称冲突。