Informatic中如何设置每月初,和每周五、周六跑批
Informatic中如何设置每月初,和每周五、周六跑批
下面是需求内容及实现:
今天同事想设置个跑批任务,要求是每月月初及每周五、周六跑,其他实间不跑。
①:这需要判断是否是月初
②:判断是否是周五、周六
两个条件只要满足一个即跑批。
首先我是设置的每天都跑该工作流,然后在线上进行判断是否满足两个条件。
一、判断是否月初
使用TRUNC函数实现
TRUNC(sysdate,'MM') = $启动.StartTime
二、判断是否周五、周六
该处首先有个参考,我们可以以否个后续不使用的时间作为参照,进行换算;判断差值是否为7天,这里我以 ‘2021-03-07’ 周日为参照。使用DATE_DIFF函数计算差值天数,MOD函数取余,来判断是星期几;因为是以周日为参照,所以取余后等于5就是星期五、等于6就是星期六。
MOD(DATE_DIFF(to_date(to_char($启动.StartTime,'YYYY-MM-DD'),'YYYY-MM-DD'),to_date('2021-03-07','yyyy-mm-dd'),'DAY'),7) = 5 or MOD(DATE_DIFF(to_date(to_char($启动.StartTime,'YYYY-MM-DD'),'YYYY-MM-DD'),to_date('2021-03-07','yyyy-mm-dd'),'DAY'),7) = 6
此处附整个判断:
MOD(DATE_DIFF(to_date(to_char($启动.StartTime,'YYYY-MM-DD'),'YYYY-MM-DD'),to_date('2021-03-07','yyyy-mm-dd'),'DAY'),7) = 5 or MOD(DATE_DIFF(to_date(to_char($启动.StartTime,'YYYY-MM-DD'),'YYYY-MM-DD'),to_date('2021-03-07','yyyy-mm-dd'),'DAY'),7) = 6 or TRUNC(sysdate,'MM') = $启动.StartTime
INFA 字典函数用法:
TRUNC
将日期截断为特定年份、月份、日、小时、分种、秒、毫秒或微秒。 也可使用 TRUNC 截断数字。 可截断以下日期部分: 年份。如果截断日期的年份部分,则函数返回输入年份 1 月 1 日,将时间设定为 00:00:00.000000000。例如,以下表达式返回 1/1/1997 00:00:00.000000000: TRUNC(12/1/1997 3:10:15, 'YY') 月份。如果截断日期的月份部分,则函数返回月份的第一天,将时间设定为 00:00:00.000000000。例如,以下表达式返回 4/1/1997 00:00:00.000000000: TRUNC(4/15/1997 12:15:00, 'MM') 日。如果截断日期的日部分,则函数返回将时间设定为 00:00:00.000000000 的日期。例如,以下表达式返回 6/13/1997 00:00:00.000000000: TRUNC(6/13/1997 2:30:45, 'DD')小时。如果截断日期的小时部分,则函数返回将分钟、秒数和子秒设定为 0 的日期。 例如,以下表达式返回 4/1/1997 11:00:00.000000000: TRUNC(4/1/1997 11:29:35, 'HH') 分钟。如果截断日期的分钟部分,则函数返回将秒数和子秒设定为 0 的日期。 例如,以下表达式返回 5/22/1997 10:15:00.000000000: TRUNC(5/22/1997 10:15:29, 'MI') 秒。如果截断日期的秒数部分,则函数返回将毫秒设定为 0 的日期。 例如,以下表达式返回 5/22/1997 10:15:29.000000000: TRUNC(5/22/1997 10:15:29.135, 'SS')毫秒。如果截断日期的毫秒部分,则函数返回将微秒设定为 0 的日期。 例如,以下表达式返回 5/22/1997 10:15:30.135000000: TRUNC(5/22/1997 10:15:30.135235, 'MS') 微秒。如果截断日期的微秒部分,则函数返回将纳秒设定为 0 的日期。 例如,以下表达式返回 5/22/1997 10:15:30.135235000: TRUNC(5/22/1997 10:15:29.135235478, 'US')
语法
TRUNC( date [,format] )
下表介绍了此命令的参数:
参数 | 必需/ 可选 | 说明 |
---|---|---|
date | 必需 | Date/Time 数据类型。 要截断的日期值。 可输入任何有效的转换表达式以计算日期。 |
格式 | 可选 | 输入有效的格式字符串。 格式字符串不区分大小写。 如果忽略格式字符串,则函数截断日期的时间部分,将其设置为 00:00:00.000000000。 |
返回值
日期。
传递至函数的值为 NULL 时返回 NULL。
DATE_DIFF
返回两个日期之间的时间长度。可请求采用年份、月份、日、小时、分钟、秒数、毫秒、微秒或纳秒格式。 PowerCenter 集成服务从第一个日期中减去第二个日期,返回差异。 PowerCenter 集成服务根据月数而不是天数计算 DATE_DIFF 函数。 它为每个月选定天数的部分月份计算日期差异。 为了计算部分月份的日期差异,PowerCenter 集成服务将该月中所用天数相加。 然后,将相加所得值除以选定月份的总天数。 对于闰年和平年中的相同期限,PowerCenter 集成服务提供不同的值。 当二月是 DATE_DIFF 函数的一部分时,就会出现差异。 对于闰年的二月,DATE_DIFF 将所用天数除以 29,对于平年的二月,则除以 28。 例如,您想要计算从 9 月 13 日至 2 月 19 日之间的月数。 在闰年,DATE_DIFF 函数将二月计算为 19/29 个月,或 0.655 个月。 在平年,DATE_DIFF 函数将二月计算为 19/28 个月,或 0.678 个月。 PowerCenter 集成服务以相似方式计算剩余月份中的日期差异,DATE_DIFF 函数返回指定期限的总值。 注: 某些数据库可能使用不同的算法计算日期差异。
语法
DATE_DIFF( date1, date2, format )
下表介绍了此命令的参数:
参数 | 必需 / 可选 | 说明 |
---|---|---|
date1 | 必需 | Date/Time 数据类型。 传递要比较的第一个日期的值。 可输入任何有效的转换表达式。 |
date2 | 必需 | Date/Time 数据类型。 传递要比较的第二个日期的值。 可输入任何有效的转换表达式。 |
格式 | 必需 | 指定日期或时间度量的格式字符串。 可指定年份、月份、日、小时、分钟、秒数、毫秒、微秒或纳秒。 只能指定日期的一个部分,例如,‘mm’。 用单引号将格式字符串括起来。 格式字符串不区分大小写。 例如,格式字符串 ‘mm’ 与 ‘MM’、‘Mm’ 或 'mM’相同。 |
返回值
双精度值。 如果 date1 晚于 date2,则返回值为正数。 如果 date1 早于 date2,则返回值为负数。
日期相同时返回 0。
其中一个(或两个)日期值为 NULL 时返回 NULL。
MOD
返回除法计算的余数。例如,MOD(8,5) 返回 3。
语法
MOD( numeric_value, divisor )
下表介绍了此命令的参数:
参数 | 必需 / 可选 | 说明 |
---|---|---|
numeric_value | 必需 | 数值数据类型。 要除以的值。 可输入任何有效的转换表达式。 |
除数 | 必需 | 要除以的数值。 除数不能为 0。 |
返回值
要传递至函数的数据类型的数值。 数值除以除数后的余数。
传递至函数的值为 NULL 时返回 NULL。