【问题标题】:MySQL search record in table by DATETIME [duplicate]DATETIME在表中的MySQL搜索记录[重复]
【发布时间】: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)

为什么这不起作用?

【问题讨论】:

    标签: mysql datetime


    【解决方案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 选项。

    【讨论】:

    • 是的,我已经尝试过了,它奏效了。还有一个小问题 - 例如,我怎样才能只按天搜索?
    猜你喜欢
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    相关资源
    最近更新 更多