由DATETIME在表中的MySQL搜索记录

时间:2014-04-10 14:09:49

标签: mysql datetime

我在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-04-04 00:00:00。我想要的是通过它的DATETIME字段搜索这条记录。例如:

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

但是这个查询返回:

Empty set, 1 warning (0.00 sec)

为什么这不起作用?

2 个答案:

答案 0 :(得分:1)

您需要使用DATE()获取日期时间字符串的日期部分以进行比较(并在日期字符串周围加上引号):

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

答案 1 :(得分: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选项。