我有一个遗留表,其varchar列代表日期,格式为MM/DD/YYYY(例如2015年8月1日).执行数据范围选择并不方便,因为它是一个varchar(当我使用<或>种类比较时,它会进行varchar/string比较,它与日期比较有不同的结果).
例如,我想只选择日期在2015年8月1日到2015年10月1日之间的行.任何智能解决方案都很受欢迎,我无法在现有表中更改varchar的数据类型.
我正在使用MySQL Workbench/MySQL.
Abh*_*rty 10
Varchar日期是邪恶的,它们不是真正的日期,最好的解决方案是使用mysql的原生日期数据类型.
由于您无法更改数据类型,因此可以使用str_to_date()函数,以及它的工作原理
mysql> select str_to_date('01/08/2015','%d/%m/%Y') as d ;
+------------+
| d |
+------------+
| 2015-08-01 |
+------------+
Run Code Online (Sandbox Code Playgroud)
因此select的查询将是
select * from table_name
where
str_to_date(date_column,'%d/%m/%Y')
between
str_to_date('01/08/2015','%d/%m/%Y')
and
str_to_date('01/10/2015','%d/%m/%Y')
Run Code Online (Sandbox Code Playgroud)