我有这个查询
SELECT added_by, count(*)
FROM `voters_registration`
WHERE DATE_FORMAT(STR_TO_DATE(added_date, '%d-%m-%Y %r'),'%d-%m-%Y') BETWEEN '01-10-2013' AND '30-10-2013'
GROUP BY added_by HAVING count(*) > 0 ;
当我使用
时SELECT added_by, count(*)
FROM `voters_registration`
WHERE DATE_FORMAT(STR_TO_DATE(added_date, '%d-%m-%Y %r'),'%d-%m-%Y') = '01-10-2013'
GROUP BY added_by
HAVING count(*) > 0 ;
它工作正常,但我在上面的查询中使用BETWEEN并没有返回正确的值。日期字段是字符串数据类型。
答案 0 :(得分:1)
如果您将日期作为字符串并且想要比较它们,则格式应始终为ANSI标准YYYY-MM-DD格式(连字符是可选的)。将字符串作为字符串进行比较,因此如果限制为'01 -10-2013'和'30 -10-2013'则几乎任何东西都在它们之间,例如'29 -12-1940'和'04 -02-2105' 。排序为 strings 。
在您的情况下,只需将值转换为日期并将比较作为日期进行:
SELECT added_by, count(*)
FROM `voters_registration`
WHERE STR_TO_DATE(added_date, '%d-%m-%Y %r') BETWEEN '2013-10-01' and '2013-10-30'
GROUP BY added_by
HAVING count(*) > 0 ;
您无需将值转换回字符串进行比较。