mysql 使用varchar删除日期列(255)

2ledvvac  于 2022-12-10  发布在  Mysql
关注(0)|答案(2)|浏览(163)

我想删除过去2年的数据。文件名为日期,类型为varchar(255)

delete from <table_name> where <Filed> like '%2022';

运行时间很长,但没有删除数据

rt4zxlrg

rt4zxlrg1#

我已经查过了,试过了,你可以试试

DELETE From <datatable> WHERE <date> LIKE '%2022';
DELETE From post WHERE date LIKE '%2022'; #Example

你能提供数据库或截图吗?我已经尝试了查询,但没有问题https://www.db-fiddle.com/f/syhtgVyEcSPcHRXBXHLtor/0

fxnxkyjh

fxnxkyjh2#

如果主键(可能是id)和Date列相关,这意味着较大的id将产生较晚的日期(在本例中,它是varchar类型的,感谢P.Salmon指出这一点),那么
我认为可以使用主键删除(通常是列id),例如:

select id from table where date > '2020' order by id asc limit 1; 
// assume this id = 123456789, and delete rows that created before this id was created

delete from table where id < 123456789;

如果没有相关性,我有一些想法如下:

1.创建类型为Year/Date/DateTime/Timestamp、名为Created_at的新列(可能使用Date或Year),它将存储实际的年份、日期或DateTime,使用它替换类型为varchar的DATE列,可能在Created_at上创建索引,然后使用新列删除
1.如果在DATE(Varchar)上有一个索引,由于%sign in LIKE子句会导致服务器不使用索引,所以它肯定是一个全表扫描,你能像列举所有像‘01-01-2020’,‘01-02-2020’一样的日期,一个日期一个日期地删除行,用一个脚本,我认为这样至少你可以使用索引
1.如果行太多,比如10年甚至更长时间,是否可以在2年内将数据迁移到新表中,然后删除旧表?
1.写一个脚本,每次从主键开始取10000行,删除超过2年的行,取下一行10000

last_id = 0

select * from table where id > last_id order by id asc limit 10000;
last_id = [last id of the query]
delete from table where id in (xxx);

相关问题