我正在寻找一种方法,使用C ++制作的系统在90天后删除旧的sqls表,我搜索但没有找到任何相关内容。
我的表名根据日期生成,例如 20170323
现在要删除的方法我想不出任何可以做的事情
答案 0 :(得分:0)
假设这些SQL表存在于DBMS而不是您自己的软件系统中 - 请不要将该任务置于您自己的代码中。使用cron
等系统工具并编写适当的几行脚本(例如bash,python或perl)来检查旧表并发出删除它们的命令。这不是你应该打扰自定义代码的任务。
我说这是一位现代C ++爱好者: - )
编辑:第二个想法 - 为什么你甚至拥有每日表?我认为这几乎肯定是一种错误的设计。所有这些都可能需要在同一个表中,有一个额外的日期列 - 可能还有一些分区或列式存储等。
答案 1 :(得分:0)
你可以有一个SQL工作来做到这一点。假设每天生成表,您可以拥有一个从sysobjects表中读取表名的作业。循环遍历它们并将表名转换为datetime,然后从当前日期中减去90并将其与从表名得到的日期时间进行比较。
答案 2 :(得分:0)
如果你想在C ++中使用逻辑并且愿意使用Howard Hinnant's free, open-source, header-only date library,你可以写一个像这样的函数:
#include "date.h"
#include <sstream>
void
maybe_remove_table(const std::string& tablename)
{
using namespace std;
using namespace std::chrono;
using namespace date;
istringstream in{tablename};
sys_days table_date;
in >> parse("%Y%m%d", table_date);
sys_days today = floor<days>(system_clock::now());
if (table_date < today - days{90})
remove_table(tablename);
}
此函数将表的名称转换为date::sys_days
,这是std::chrono::time_point<system_clock, days>
的类型别名。这只是一个粗略的time_point
。然后它获取当前日期(由UTC定义),并将表格的日期与当天之前的90天进行比较。