【发布时间】:2013-08-08 09:21:14
【问题描述】:
如果日期格式为Y-m-d H:i:s,如何SELECT特定日期的行?
即我想选择如下行:
WHERE DATE(datet) = '2013-08-07'
但值为:2013-08-07 11:23:45
【问题讨论】:
-
就是这样:MySQL 可以通过 DATE() 函数将 DATETIME 转换为 DATE
如果日期格式为Y-m-d H:i:s,如何SELECT特定日期的行?
即我想选择如下行:
WHERE DATE(datet) = '2013-08-07'
但值为:2013-08-07 11:23:45
【问题讨论】:
您自己有解决方案:
SELECT * FROM tbl WHERE DATE(datet) = '2013-08-07'
假设datet 是DATETIME 列,这是最有效的方法,因为那时MySQL 将能够使用datet 上的潜在索引来处理WHERE 子句。
根据您的 MySQL WHERE datet LIKE '2013-08-07%' 版本,也可能通过使用索引来完成这项工作(因为模式的最左边部分是恒定的)。但我认为这不太优雅。
编辑:事实上,通过测试看来,VARCHAR/CHAR 列也可以有效地工作。见http://sqlfiddle.com/#!8/1c2da/1(点击“查看执行计划”查看索引是如何使用的)。
【讨论】:
这样使用
SELECT DATE('2013-08-07 11:23:45');
它会返回
-> '2013-08-07'
你可以使用
WHERE DATE(datet) = DATE('2013-08-07 11:23:45')
http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date
【讨论】:
您可以使用以下查询尝试执行以下查询:
SELECT * FROM `YOUR TABLE` WHERE DATE(`YOUR FIELD`) = DATE("2013-08-07");
或
SELECT * FROM `YOUR TABLE` WHERE `YOUR FIELD` LIKE "%2013-08-07%";
【讨论】: