【问题标题】:SQL SELECT * FROM datetime = CURDATE() return an empty result setSQL SELECT * FROM datetime = CURDATE() 返回一个空结果集
【发布时间】:2016-09-09 15:22:25
【问题描述】:

谁能告诉我我的错误在哪里?通过使用该查询,它应该返回一些数据具有 datetime = '2012-10-12' 的行,对吗?这是我的reference

我的日期时间列 = 'YYYY-MM-DD HH:MM:SS',数据类型 = 日期时间。

我正在使用 XAMPP v1.8.0、MySQL v5.5.25a。

【问题讨论】:

    标签: mysql sql datetime


    【解决方案1】:

    尝试使用DATE()CASTing datetimedate

    SELECT * 
    FROM tableName
    WHERE DATE(`datetime`) = DATE(CURDATE())
    

    YYYY-MM-DD HH:MM:SS 不等于YYYY-MM-DD

    2012-01-01 12:12:12 is not equal to 2012-01-01 00:00:00
    

    【讨论】:

    • 谢谢,很抱歉我错过了日期时间转换。
    • @JohnWoo,+1。无需 DATE()-强制 CURDATE(),但是,它已经是 DATE 类型。此外,YYYY-MM-DD HH:MM:SS 确实等于 YYYY-MM-DD,但仅限于 00:00:00(DATE 提升为 DATETIME)。
    【解决方案2】:

    不要在列上使用函数,例如DATE(datetime) - mysql 不能使用你的索引。

    使用范围几乎肯定会更好:

    WHERE `datetime` between '2012-01-01 00:00:00' and '2012-01-01 23:59:59'
    

    或仅将 DATE 部分存储在单独的列中(基数较低,优化器会更好地处理)。

    【讨论】:

    • 这个还是很重要的考虑!在大型数据库上,这可能会使您的查询速度提高一百倍以上!这应该是公认的答案。
    【解决方案3】:
    SELECT * FROM tableName WHERE DATE(datetime) = CURDATE()
    

    【讨论】:

    • 解释一下就好了。
    【解决方案4】:

    使用 mysql 中的 DATE() 将 TIMESTAMP 格式化为 DATE

    Select * FROM tablename WHERE DATE(colname) = CURDATE()

    【讨论】:

      猜你喜欢
      • 2011-08-10
      • 1970-01-01
      • 2020-04-08
      • 1970-01-01
      • 2011-05-03
      • 2021-02-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多