将日期时间转换为日期

时间:2010-11-25 21:47:52

标签: sql mysql indexing

我在tbl1.date和tbl2.datetime上有索引。当我执行以下操作时:

EXPLAIN SELECT * FROM tbl1 LEFT JOIN tbl2 ON tbl2.datetime = tbl1.date

tbl2.datetime索引被使用(如预期的那样)

显然,我需要将tbl2.datetime转换为日期,以便SELECT语句在现实生活中发挥作用。但是,这样做会导致没有使用任何索引:

EXPLAIN SELECT * FROM tbl1 LEFT JOIN tbl2 ON DATE(tbl2.date) = tbl1.date

我错过了什么?

更新: 我尝试过类似的东西,但不断收到语法错误

  

“#1064 ....查看与您的MySQL服务器版本对应的手册,以便在'SELECT * FROM tbl1 LEFT JOIN tbl2 ON DATE(SELECT * FROM(SELECT DISTINCT datetime FROM tbl2.datetime)'附近使用正确的语法如第1行的“tem”

EXPLAIN SELECT * FROM tbl1 LEFT JOIN tbl2 ON DATE( SELECT * FROM (SELECT DISTINCT          
datetime FROM tbl2.datetime) as tempTable ) = quotes.GOOG.date

2 个答案:

答案 0 :(得分:3)

  

我错过了什么?

没什么 - 你不能改变数据或数据类型,并期望能够使用索引。

在进行比较时进行更改时,索引中的值与您想要/需要使用的值之间没有任何关联。唯一的选择是以不需要更改的方式存储值,如果您想要查看索引的使用。

答案 1 :(得分:0)

有趣的问题。作为一种解决方法,我试图在JOIN条件的一方面隔离DATETIME ...

EXPLAIN SELECT * 
FROM tbl1
LEFT JOIN tbl2 ON tbl2.datetime
BETWEEN CONCAT( tbl1.date,  ' 00:00:00' ) AND CONCAT( tbl1.date,  ' 23:59:59' )

FWIW,这是一次失败。

相关问题