如何删除MySQL中早于2020/11个月的字符串日期



我有一个数据库,大约有500k行,我不知道为什么,但我没有使用"日期";在它使用的列上键入";varchar";。现在日期的格式为01/02/2021 07:08:49 AM

我的问题是SQL查询应该如何删除这种";旧的";表中的日期行?或者另一方面,我应该如何在不丢失数据的情况下转换列,并将相同的格式转换为Date类型的列?

我试着用这样的东西删除:

DELETE FROM `visited` WHERE LEFT(`last_visit_date`, 2) != '01' OR LEFT(`last_visit_date`, 2) != '12';

然而,这并没有完全清洁桌子。

如有任何帮助,我们将不胜感激。

您可以在删除查询中使用STR_TO_DATE将文本日期转换为真实日期:

DELETE
FROM visited
WHERE
STR_TO_DATE(last_visit_date, '%d/%m/%Y %h:%i:%s %p') < '2020-11-01';

请注意,如果您的文本日期实际上是前一个月的日期,则使用此调用STR_TO_DATE:

STR_TO_DATE(last_visit_date, '%m/%d/%Y %h:%i:%s %p')

如果您不想丢失格式错误的日期,可以更新表:

UPDATE visited
SET last_visit_date = STR_TO_DATE(last_visit_date, '%d/%c/%Y %r')
WHERE last_visit_date LIKE '__/__/____ __:__:__ __';

并将列的数据类型更改为DATETIME(如果last_visit_date的所有其他值都是有效的日期时间(:

ALTER TABLE visited MODIFY last_visit_date DATETIME;

查看简化的演示。

最新更新