我正在尝试使用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?
这样我只能在给定的两个日期之间获得所有记录。
答案 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_FORMATselect 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';