【问题标题】:how to test date and datetime with mysql如何使用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");

好吧,正如预期的那样,它不起作用:|你们有解决办法吗?

【问题讨论】:

    标签: mysql datetime date


    【解决方案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:看起来你是对的:stackoverflow.com/questions/95183。当您需要使用索引时,您的解决方案就是您要走的路。
        • @Daniel:感谢您的搜索、更新和链接 :-)
        猜你喜欢
        • 1970-01-01
        • 2019-11-08
        • 2013-06-16
        • 1970-01-01
        • 2015-05-29
        • 2011-03-01
        • 2012-08-11
        • 2015-01-01
        • 1970-01-01
        相关资源
        最近更新 更多