2014-04-10 85 views
0

I`ve创建此表在MySQL:MySQL的搜索记录

CREATE TABLE events (
    id TINYINT PRIMARY KEY AUTO_INCREMENT, 
    title VARCHAR (15) NOT NULL, 
    description TEXT NOT NULL, 
    _type VARCHAR (15) NOT NULL, 
    date_time DATETIME NOT NULL, 
    location VARCHAR (15) NOT NULL 
)ENGINE = INNODB; 

以后,我在表中插入一些记录,它们中的一个DATETIME场2014年4月4日00:00 :00。我想要的是通过它的DATETIME字段搜索此记录。例如:

SELECT * FROM events WHERE date_time = 2014-04-04; 

但这个查询返回:

Empty set, 1 warning (0.00 sec) 

为什么这个isn`t工作?

回答

1

您需要使用DATE()得到的时间字符串作比较的日期部分(并把周围的日期字符串引号):

SELECT * FROM events WHERE DATE(date_time) = '2014-04-04'; 
+0

嘿乔恩,你可以评论接受的答案[这里](http://stackoverflow.com/questions/14104304/mysql-select-where-datetime-matches-day-and-not-necessarily-time)?我正要把这个标记为伪装,并建议不要使用'DATE'的回答 – Andy

+0

工作!对不起,愚蠢的问题,并感谢.. :) – user2976091

+1

@Andy这将是一个更好的做法,然后我在这里回答。 –

1

你有一个选项是

WHERE columname BETWEEN '2014-04-04 00:00:00' AND '2014-04-04 23:59:59' 

的在WHERE DATE(date_time) = '2014-04-04'回答中使用此优点的优点是,使用DATE函数(如Eugine Reick在此answer中提到的)

  • 它会计算所有行,包括那些不符合
  • 这将使它无法使用索引的查询

因此,如果你的表是小DATE()并且预计不会显着增长,DATE答案将适用于您。但是,如果您期望获得大量数据,性能将会恶化。最好使用BETWEEN选项。

+0

是的,我试过这个,它工作。还有一个小问题 - 我如何才能在一天之内搜索例如? – user2976091