CalendarPattern 数据类型

日历模式数据类型在日历模式中定义时间间隔持续时间以及有效和无效时间间隔的模式。

日历模式数据类型是不透明数据类型,格式如下:

表 1. 日历模式数据类型参数值
描述
interval 以下时间间隔名称之一:
  • 分钟
  • 小时
num_intervals 表示时间间隔单位数的正整数。时间间隔单位数是时间系列数据的有效时间间隔(如果后接 on)或是时间系列数据的无效时间间隔(如果后接 off)。无论是 on 还是 off,在日历模式中最大的时间间隔单位数为 2035。如果使用较长的日历模式,那么内部计算将花费较长的时间执行。

用法

花括号中的信息是模式规范。模式规范包含一个或多个由 n(时间间隔单位数)以及 onoff(表示有效或无效的时间间隔)组成的元素。元素由逗号分隔。

日历模式长度是在该日历模式重新开始之前的时间间隔数;模式规范中的所有时间点都执行完毕后,将重复执行该模式。出于此原因,时间间隔为每天的每周日历模式必须严格包含七个时间间隔,时间间隔为每小时的每天日历模式必须严格包含 24 个时间间隔,依此类推。日历模式何时开始由日历模式开始日期指定。

例如,可以根据正常一周五个工作日(以天为时间单位),星期六和星期日作为休息日来构建日历。假设日历模式开始日期为星期日,那么此日历模式的语法将为:
INSERT INTO CalendarPatterns
  VALUES('workweek_day',
        '{1 off, 5 on, 1 off}, day');
在下一个示例中,日历根据相同的一周五个工作日(以小时为时间单位)构建:
INSERT INTO CalendarPatterns
  VALUES('workweek_hour',
        '{ 32 off, 9 on, 15 off, 9 on, 15 off, 9 on, 15 off, 
           9 on, 15 off, 9 on, 31 off }, hour'};

两个示例的日历模式长度都是七天,或者说一周。

注: 请确保日历模式长度正确,否则时间系列数据可能会不符合您的需求。例如,以下模式看起来是每周重复一次,但该模式实际是每六天重复一次,因为时间间隔总计只有六天:
{1 off, 4 on, 1 off}

可以通过使用 HideElem 函数隐藏没有数据的元素来管理日历模式异常。

日历模式存储在 CalendarPatterns 表中,可以在若干日历中使用或重复使用。

可以使用形成日历模式的布尔运算 AND、OR 和 NOT 的函数对日历模式进行组合。生成的日历模式可以存储在日历模式表中或作为其他函数的参数使用。

可以将日历模式时间间隔与 WithinRWithinC 函数一起使用来搜索指定时间点附近的数据。WithinR 函数执行相对搜索。相对搜索从起始时间点向前或向后搜索,经过指定的时间间隔数,到达将来或过去时间点。WithinC 函数执行 calibrated 搜索。经校准的搜索向前后两个方向执行搜索,直到到达围绕给定起始时间点的时间间隔边界。

示例

以下语句创建名为 hour 的模式,该模式的时间点为每个小时:

INSERT INTO CalendarPatterns
			VALUES('hour', '{1 on} hour');

以下语句创建名为 fifteen_min 的模式,该模式包含一个 15 分钟的时间点:

INSERT INTO CalendarPatterns
			VALUES('fifteen_min', '{1 on, 14 off} minute');

以下语句创建名为 ourday_day 的模式,该每周模式是四天上班,三天休息:

INSERT INTO CalendarPatterns
  VALUES('fourday_day',
        '{1 off, 4 on, 2 off}, day');