最近这几天项目用到好久不写SQL语句了,有些都忘了,新需求是定时删除数据,以防数据太多.
刚开始写的时候也是各种碰钉子,遇到了各种问题,也在网上找了一些操作语句,但是有些早我这里不能用,然后我就开始自己想啊
这些是在网上找的,基本全是删除用的
// String a="DELETE FROM Student WHERE time('now', '-7 day') >= date(CreatedTime)";
// String b="DELETE FROM Student WHERE time('now', '-2 hours') >= date(CreatedTime)";
// String c="delete from Student where (TO_DAYS(NOW()) - TO_DAYS(time))>=7";
// String d="delete from Student WHERE TO_DAYS(NOW()) - TO_DAYS(time) <= 7";
// String f="DELETE FROM Student WHERE EVENT_TIME IS NULL OR DATE(EVENT_TIME) <= DATE(DATE_SUB(NOW(),INTERVAL 7 DAY))";
// String e="DELETE FROM Student where DATE_SUB(CURDATE(), INTERVAL 7 DAY) <= date(time);";
// String g="DELETE FROM Student where TO_DAYS(NOW())-TO_DAYS(time)>1;";
// String h="DELETE FROM Student WHERE date('now', '-7 day') >= date(time);";
// String i="DELETE FROM Student WHERE julianday('now') - julianday(time) >= 7;";
可能在别的数据库里面可以用到吧
废话也不多说了直接上代码了
查询语句:
select * from 表名where 字段名>='2017-06-01' and 字段<='2017-06-05';
删除语句:
DELETE FROM 表名 WHERE 时间的字段名 <'2019-04-11 14:45:00';
为什么最后面的时间那样写呢,因为我时间格式化为 yyyy-MM-dd HH:mm:ss
这样的
删除N天前的
DELETE FROM 表名 WHERE 时间的字段名 <' "+getOldDate(N)+" ';
getOldDate这个方法是获取N天前的日期
public static String getOldDate(int distanceDay) {
SimpleDateFormat dft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date beginDate = new Date();
Calendar date = Calendar.getInstance();
date.setTime(beginDate);
date.set(Calendar.DATE, date.get(Calendar.DATE) - distanceDay); //加号为N天前
// date.set(Calendar.DATE, date.get(Calendar.DATE) + distanceDay); //加号为N天后
Date endDate = null;
try {
endDate = dft.parse(dft.format(date.getTime()));
} catch (ParseException e) {
e.printStackTrace();
}
return dft.format(endDate);
}
最后还是问了一位大佬,他给了我灵感,然后写出来了当时的心情啊
甚至还有点想
如果这些东西对大家有用处点个赞呗