我想从特定日期和时区开始,每隔14天在CRON中执行一次作业。
例如,从6月24日起,每14天在CST时区。
每两周运行一次作业
简单的方法
最简单的方法就是创建一个任务,从你希望它第一次运行开始,每14天运行一次,比如:
CREATE TASK mytask_fortnightly
WAREHOUSE = general
SCHEDULE = '20160 MINUTE'
AS
SELECT 'Hello world'
它的工作原理
因为一小时有60分钟,一天有24小时,两周有14天,所以是20160分钟。
洞穴
上述解决方案不是从给定日期/时间起每两周运行一次任务,而是从创建任务起每两星期运行一次。
尽管这是最简单的方法,但它确实需要您名义上在场,才能在下一个计划的确切时间创建任务。
然而,作为一种变通方法,您可以创建一个一次性任务,以便在正确的日期/时间第一次为您完成此任务。这意味着你不必记住自己是清醒的/警觉的/在场的才能手动完成,之后你可以清理创建任务。
更难的方式
其他解决方案将要求您创建一个每周四运行的任务(由于2021-06-24是/曾经是周四,随后的每个周四要么是休息周,要么是两周(
例如SCHEDULE = 'USING CRON 0 0 * * THU'
然后你将添加特定的逻辑来确定哪一个是正确的两周
使用这种方法还将产生休息周的执行成本,以确定这一周是否正确。
Javascript SP
在javascript中,您可以通过从当前日期减去开始日期来确定这是否是正确的一周,如果不是14天的倍数,则将此作为短路SP的条件。
const deltaMs = (new Date) - (new Date('2021-06-24'));
const deltaDays = ~~(deltaMs / 86400000);
const run = deltaDays % 14 === 0;
if (!run) return;
// ... continue to do what you want.
SQL
您还可以在WHERE
子句或IFF
/CASE
函数中使用以下SQL条件来检查是否需要两周时间。
DATEDIFF('day', '2021-06-24', CURRENT_DATE) % 14 = 0