mysql - 使用 Between 与列类型 VARCHAR 比较日期

标签 mysql

我有一个名为 UPDATES 的数据库表,其中插入了一些日志。在此表中,有一个名为 Time 的列。该时间列的类型为 VARCHAR。我别无选择,只能将其设为 VARCHAR,因为存在损坏时间的更新,例如 2013-04-04 00xcdww,有时例如 2013-4-2 以及一些非 ASCII 值。因此,如果列类型为 DATETIME,则该日期时间的插入可能会触发错误。

现在我正处于比较两个日期以获得结果范围的阶段。

所以我的问题是,使用 VARCHAR 可以正确比较日期吗?

正在做:

Date(Time) BETWEEN 2013-03-02 AND 2013-03-02 

或者这会返回无效结果吗?如果确实如此,您能告诉我此查询将返回哪些不在指定范围内的内容吗?

最佳答案

是的,您需要使用 STR_TO_DATE 将 varchar 转换为日期格式

WHERE STR_TO_DATE(Time, '%Y-%m-%d')
BETWEEN '2013-03-02' AND '2013-03-02'


mysql> select STR_TO_DATE('2013-04-04 00xcdww', '%Y-%m-%d') ;
+-----------------------------------------------+
| STR_TO_DATE('2013-04-04 00xcdww', '%Y-%m-%d') |
+-----------------------------------------------+
| 2013-04-04                                    |
+-----------------------------------------------+

关于mysql - 使用 Between 与列类型 VARCHAR 比较日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22958844/

相关文章:

PHP - 如何检查 Curl 是否实际发布/发送请求?

mysql - 选择AS以简化返回数组的结构

mysql - 使用 golang 获取 mysql 连接时出错

MySQL:如果将 ubuntu 从 10.04 升级到 12.04,我的 Django 应用程序会出现问题吗?

MYSQL:过去一周的日期指示器

mysql - 循环查询在 Node js 中 Sequelize

来自 Recordset 的 MySQL 列

PHP MySQL WHERE SUM WHERE SUBSTRING

php - 修复 phpMyAdmin 用户 'root' @'localhost' 的访问被拒绝

php - MySQL 使用 table1.id REGEXP table2.id 为同一组选择不同的行