varchar日期时间比较问题

Lin*_* Ma -1 mysql sql

我有一个遗留表,其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)

  • 简单地为句子提升*"Varchar日期是邪恶的"* - 如果人们使用适当的数据类型,Stackoverflow将无法接近10,000,000个问题! (2认同)