我的表格使用日期时间(YYYY-MM-DD HH:MM:SS)
,我需要显示今天的条目。如何使用mysql测试日期和日期时间
我的代码只是:
SELECT *
FROM table
WHERE date = '$date'
ORDER BY score DESC
与
$date = date("Y-m-d");
良好,预期它不工作:|你们在这里有一个解决方案?
我的表格使用日期时间(YYYY-MM-DD HH:MM:SS)
,我需要显示今天的条目。如何使用mysql测试日期和日期时间
我的代码只是:
SELECT *
FROM table
WHERE date = '$date'
ORDER BY score DESC
与
$date = date("Y-m-d");
良好,预期它不工作:|你们在这里有一个解决方案?
帕斯卡尔·马丁之后,你可以提取日期部分从日期+时间字段:
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)
你的日期是“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
是不是有一个更美丽的选项来写呢? thx无论如何,这本来会花费一些思考 – 2009-12-19 22:59:05
胡;我想我不同意“美丽”的定义,我想 - 至少,我不认为这看起来“丑陋”,但是,呃......;这个解决方案的一个优点是它应该使用你在“日期”列中的索引,如果你有一个(也许你应该)),而一个解决方案转换“日期”列或做一个计算在它将消除使用索引的abolity。 – 2009-12-19 23:01:17
你的指数是什么意思? 和由美丽,我发现丹尼尔Vassallo更干净的解决方案 – 2009-12-19 23:04:15
你可能想,当你选择它格式化数据:
SELECT *, DATE_FORMAT(date, '%Y-%m-%d') AS dateformat FROM table
WHERE dateformat = '$date' ORDER BY score DESC
其显示unknows列名dateformat – 2017-03-25 12:28:07
您比较日期时间和日期的表达,这就是为什么它不工作。使用Date()方法从datetime返回日期部分,然后进行比较。 WHERE DATE(date)='$ date'应该这样做。您可能必须使用别名来处理此名称冲突。
这是最好的方式来做到这一点=)thx很多 – 2009-12-19 23:02:42
如果我没有弄错,像这样的解决方案,其中有一个“日期”列计算,计算/转换必须在表格的每一行上进行 - 破坏了使用可能在“日期”列中设置的索引的机会。 – 2009-12-19 23:02:52
@帕斯卡尔:是的,我认为是。我在答案中加入了澄清......与此同时,我正在检查MySQL如何处理这个问题,因为好奇。 – 2009-12-19 23:06:48