0

此查询没有结果,也没有错误。Bar 是数据类型 DATETIME。

SELECT * FROM foo WHERE DATE(bar) = '2013-02-26';

这个查询:

SELECT COUNT(*),DATE(bar) FROM foo GROUP BY DATE(bar) ORDER BY DATE(bar) DESC;

产生以下结果:

结果

我究竟做错了什么?

// 编辑由于某种原因,这按预期工作......

 SELECT * FROM foo WHERE DATE_FORMAT(bar,'%Y-%m-%d') = "2013-02-26"
4

1 回答 1

1

您发布的查询中没有任何“错误”。关于为什么该查询将返回 0 行没有简单的解释。

为了帮助调试问题,我建议您查看此查询是否返回行:

SELECT bar
  FROM foo
 WHERE DATE(bar) = '2013-02-26'
 LIMIT 10

或这个

SELECT bar
  FROM foo
 WHERE bar >= '2013-02-26'
   AND bar  < '2013-02-26' + INTERVAL 1 DAY
 LIMIT 10

(注意:后一个查询可以使用索引范围扫描操作,该操作使用具有前导列的索引bar;对于其他查询形式(将bar列包装在DATE函数中,MySQL 不能使用索引范围扫描。)

跟进:

接下来,通过将该表达式添加到 SELECT 列表来检查 DATE(bar) 返回的值...

SELECT DATE(bar)
     , bar
  FROM foo
 WHERE bar >= '2013-02-26'
   AND bar  < '2013-02-26' + INTERVAL 1 DAY
 LIMIT 10
于 2013-02-27T19:22:31.840 回答