一尘不染

varchar日期时间比较问题

sql

我有一个旧表,该表的varchar列表示日期,格式为MM/DD/YYYY(eg
01/08/2015)。因为它是varchar,所以执行数据范围选择并不方便(当我使用<或>种类比较时,将转到varchar /
string比较,这与日期比较的结果有所不同)。

例如,我只选择日期在2015年8月8日到2015年10月10日之间的行。感谢任何智能解决方案,并且我无法在现有表中更改varchar的数据类型。

我正在使用MySQL Workbench / MySQL。


阅读 130

收藏
2021-05-16

共1个答案

一尘不染

Varchar日期是邪恶的,它们不是真实日期,最好的解决方案是使用mysql的本地日期数据类型。

由于您无法更改数据类型,因此可以使用str_to_date()函数及其作用方式

mysql> select str_to_date('01/08/2015','%d/%m/%Y') as d ;
+------------+
| d          |
+------------+
| 2015-08-01 |
+------------+

所以选择查询将是

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')
2021-05-16