如何使用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 日期时间

如何使用mysql和c#比较时间和日期

如何使用 mysql 提供的日期获取“时间前”? [关闭]

日期 mysql 的创建日期和上次更新日期

如何编写一个同时适用于 HSQLDB 和 MySQL 的查询以在 WHERE 子句中为日期添加天数?

如何使用 pytz 和 tzlocal 测试日期时间转换?