mysql DATE_FORMAT()之间给了我bug

时间:2014-03-11 11:17:35

标签: mysql sql

我正在尝试使用my_table,其中modifiedtime的类型为datetime

select DATE_FORMAT(modifiedtime,'%d-%m-%Y') from my_table
where DATE_FORMAT(modifiedtime,'%d-%m-%Y') between '05-11-2013' and '28-11-2013';

该查询也给了我一些其他记录,这些记录不在上述日期之间,例如,结果集中有一条记录为'04-01-2014'

select DATE_FORMAT(modifiedtime,'%d-%m-%Y') from my_table
    where DATE_FORMAT(modifiedtime,'%d-%m-%Y')='05-11-2013'

此查询正常工作并提供给定日期的所有记录

why the first behaves like that?
How can i correct it?
what is the efficient way to implement it?

这样我只能在给定的两个日期之间获得所有记录。

3 个答案:

答案 0 :(得分:1)

SELECT 
    DATE_FORMAT(modifiedtime, '%d-%m-%Y')
FROM
    my_table
WHERE
    modifiedtime BETWEEN STR_TO_DATE('05-11-2013', '%d-%m-%Y') AND STR_TO_DATE('28-11-2013', '%d-%m-%Y');

答案 1 :(得分:0)

DATE_FORMAT()返回TEXT类型列,不能应用日期。

在WHERE

中不使用DATE_FORMAT
select DATE_FORMAT(modifiedtime,'%d-%m-%Y') from my_table
where modifiedtime between '05-11-2013' and '28-11-2013';

答案 2 :(得分:0)

你DATE_FORMAT函数将列modifiedtime转换为String。 因此在第一个查询中,您进行字符串比较而不是日期比较。 您的日期文字也不正确。它必须是YYYY-MM-DD

的形式
select DATE_FORMAT(modifiedtime,'%d-%m-%Y') from my_table
where cast(modifiedtime as date) between '2013-11-05' and '2013-11-28';