【问题标题】:MySQL How to SELECT data from table which recorded today?MySQL 如何从今天记录的表中选择数据?
【发布时间】:2011-12-02 18:06:27
【问题描述】:

使用 PHP 和 MySQL。在我的表中,有 NOW() sql 函数记录的日期字段(日期时间)。该字段中数据的示例值为2010-10-07 10:57:36。如何选择今天的日月年的所有数据。我尝试使用如下代码:

  SELECT * FROM table WHERE date=????

【问题讨论】:

    标签: php mysql datetime select


    【解决方案1】:
    SET @day = '2017-12-12' ;
    
    SELECT * FROM table WHERE dateColumn BETWEEN DATE(@day) AND DATE_ADD(DATE(@day), INTERVAL 1 DAY ) ;
    

    【讨论】:

      【解决方案2】:

      使用这样的东西,它完全适用于我的代码(访问数据库):

      select * from Table t where t.column>=Date() and t.column< Date() + 1
      

      【讨论】:

        【解决方案3】:

        试试这个

        SELECT * FROM table WHERE DATE(my_date)=DATE(now())
        
        my_date -> column name
        

        【讨论】:

          【解决方案4】:

          试试这个:

          SELECT * FROM table WHERE date > CURDATE();
          

          CURDATE() 将返回当前日期为2011-10-07,在将datetimes 与它进行比较时,它将被转换为2011-10-07 00:00:00

          请注意,如果您使用DATE(date) = CURDATE(),您将为表格中的每一行运行日期转换,如果您有很多行和/或您需要经常运行查询。还要确保你在date 上有一个索引,否则这两种方法都会更慢。

          【讨论】:

          • 如果您在查询结尾上方插入,分号可能会破坏这一点
          • 'CURDATE' 不是可识别的内置函数名称。
          • @PradeepKumarPrabaharan:这听起来不像是 MySQL 错误。也许您正在运行 MSSQL?请改用GETDATE()
          【解决方案5】:

          date_format功能让你轻松切换各种粒度:

          选择同一天的所有内容:

          select * from table 
          where date_format(date, '%Y-%m-%d') = date_format(now(), '%Y-%m-%d');
          

          从同一个月开始:

          select * from table 
          where date_format(date, '%Y-%m') = date_format(now(), '%Y-%m');
          

          同年:

          select * from table 
          where date_format(date, '%Y') = date_format(now(), '%Y');
          

          从同一时间开始:

          select * from table 
          where date_format(date, '%Y-%m-%d %H') = date_format(now(), '%Y-%m-%d %H');
          

          等等。

          【讨论】:

          • 'date_format' 不是可识别的内置函数名称。
          【解决方案6】:
          SELECT * FROM tableName WHERE DATE(fieldDate) = DATE(NOW());
          

          【讨论】:

            【解决方案7】:

            SELECT * FROM table where DATE(date)=CURDATE()

            【讨论】:

            • Kaivosukeltaja 的解决方案在性能方面可能会更好
            • Msg 195, Level 15, State 10, Line 6 'CURDATE' 不是可识别的内置函数名称。
            • 'DATE' 不是可识别的内置函数名称。
            • 截至目前,CURDATE() 和 DATE() 函数都在 MySQL 5.0 到 beta 8.0 (当前最新版本为dev.mysql.com/doc/refman/5.7/en/…)。您确定您使用的是 MySQL 并且查询中没有其他语法问题吗?
            【解决方案8】:

            在之间使用。

            select * from table date between '2010-10-06' and '2010-10-08';
            

            【讨论】:

            • 呃..今天是指用户打开我的页面的那一天,而不是 2010 年 10 月 8 日。顺便说一句,谢谢 denolk。
            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-07-14
            • 2017-07-10
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多