我有一个名为 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/