我在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)
为什么这不起作用?
答案 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
答案将对您有用。但是,如果您期望大量数据,性能将会下降。最好使用BETWEEN
选项。