MySQL 用于存储日期的 Varchar,在年末无法排序?

MySQL Varchar to store dates, unsortable at years end?

MySQL 数据库有从 2015 年开始的多年记录,但现在所有需要使用条目日期的查询都存在跨越 2015 年到 2016 年的问题。查看数据库,日期已经存储为 Varchar。现在,运行 查询

SELECT SUM( salesPrice ) AS total
FROM sales
WHERE salesDate >=  '01-01-2016'
AND salesDate <=  '02-07-2016'

'total' 不正确。它正确查询销售日期为 01-01-2016 到 01-07-2016(当天)的条目,但随后继续使用去年的项目添加到总数中。

转换列并改写查询以阻止此错误的合理方法是什么?

脱离我的头脑,也许试试:

SELECT SUM( salesPrice ) AS total
FROM sales
WHERE FROM_UNIXTIME(salesDate) >=  $time_from
AND FROM_UNIXTIME(salesDate) <=  $time_to

其中 $time_from$time_to 转换为带有 PHP 的时间戳格式的 strtotime() 函数

使用STR_TO_DATE

SELECT SUM( salesPrice ) AS total
FROM sales
WHERE STR_TO_DATE(salesDate,'%m-%d-%Y') >=  '2016-01-01'
AND STR_TO_DATE(salesDate,'%m-%d-%Y') <=  '2016-02-07'

请注意,MySQL 默认使用日期格式 Y-m-d,这正是它所期望的。