DATETIME在表中的MySQL搜索记录[重复]

Posted

技术标签:

【中文标题】DATETIME在表中的MySQL搜索记录[重复]【英文标题】:MySQL search record in table by DATETIME [duplicate] 【发布时间】:2014-05-24 07:19:03 【问题描述】:

我已经在 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)

为什么这不起作用?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

嘿乔恩,你能评论接受的答案here吗?我正要将此标记为骗子,它建议您不要使用DATE 工作!抱歉这个愚蠢的问题,谢谢.. :) @Andy 那将是比我在这里回答的更好的做法。【参考方案2】:

你有一个选项是

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 选项。

【讨论】:

是的,我已经尝试过了,它奏效了。还有一个小问题 - 例如,我怎样才能只按天搜索?

以上是关于DATETIME在表中的MySQL搜索记录[重复]的主要内容,如果未能解决你的问题,请参考以下文章

为mysql中的每个查询结果在表中插入行[重复]

MySQL索引

sql查询 如何获取查找某ID的一条记录在表中是第几条记录

使用 Mysql 和 PHP 在表中汇总 [重复]

Mysql优化方法

我的 pdo 结果在表中重复