如何使用mysql测试日期和日期时间
Posted
技术标签:
【中文标题】如何使用mysql测试日期和日期时间【英文标题】:how to test date and datetime with mysql 【发布时间】: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");
好吧,正如预期的那样,它不起作用:|你们有解决办法吗?
【问题讨论】:
【参考方案1】:您的日期是“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
【讨论】:
没有更漂亮的写法吗?无论如何,谢谢你的提示,那需要一些思考 胡;我们不同意“美丽”的定义,我想——至少,我不认为这看起来“丑陋”,但是,嗯......;;该解决方案的一个优点是它应该使用您在“日期”列上的索引,如果您有任何索引(也许您应该) - 而转换“日期”列或进行计算的解决方案它将删除使用索引的abolity。 索引是什么意思?通过美丽,我发现 Daniel Vassallo 的解决方案更干净 Heu... 600 个字符实际上不足以解释索引是什么 ^^ 但是您可以先看看手册的这一页:dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html 【参考方案2】:您可能希望在选择数据时对其进行格式化:
SELECT *, DATE_FORMAT(date, '%Y-%m-%d') AS dateformat FROM table
WHERE dateformat = '$date' ORDER BY score DESC
【讨论】:
【参考方案3】:您正在比较日期时间和日期表达式,这就是它不起作用的原因。使用 Date() 方法从 datetime 返回日期部分,然后进行比较。 WHERE DATE(date) = '$date' 应该这样做。您可能必须使用别名来处理这种名称冲突。
【讨论】:
【参考方案4】:按照 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)
【讨论】:
如果我没记错的话,使用像这样的解决方案,其中“日期”列有计算,必须在表格的每一行进行计算/转换-- 破坏使用可能已在“日期”列上设置的索引的机会。 @Pascal:是的,我想是的。我已经在我的回答中添加了说明......与此同时,为了好奇,我正在检查 MySQL 如何处理这个问题。 @Daniel:好的;;谢谢你的精确:-)我也很好奇,只是想知道我的想法是否真的是真的^^ @Pascal:看起来你是对的:***.com/questions/95183。当您需要使用索引时,您的解决方案就是您要走的路。 @Daniel:感谢您的搜索、更新和链接 :-)以上是关于如何使用mysql测试日期和日期时间的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JPA 将 Java 日期存储到 Mysql 日期时间