Clip 函数

Clip 函数抽取时间系列中两个时间点之间的数据,并返回包含该数据的新时间系列。您可以从大型时间系列中抽取关注的时间段,并独立于大型系列对其进行存储或运算。

语法

Clip(ts           TimeSeries, 
    begin_stamp datetime year to fraction(5), 
    end_stamp    datetime year to fraction(5), 
     flags       integer default 0) 
returns TimeSeries;

Clip(ts           TimeSeries, 
    begin_stamp datetime year to fraction(5), 
    end_offset   integer, 
     flags       integer default 0) 
returns TimeSeries;

Clip(ts           TimeSeries, 
    begin_offset integer, 
    end_stamp    datetime year to fraction(5), 
     flags       integer default 0) 
returns TimeSeries;

Clip(ts           TimeSeries, 
begin_offset integer, 
    end_offset   integer, 
flags       integer default 0) 
returns TimeSeries;
ts
要剪切的时间系列。
begin_stamp
范围的起始点。可为 NULL
end_stamp
范围的结束点。可为 NULL
begin_offset
范围的起始点偏移量(仅限规则的时间系列)。
end_offset
范围的结束点偏移量(仅限规则的时间系列)。
flags(可选)
一种标志,用于指定如何确定生成的时间系列原点以及是否将隐藏的元素复制到生成的时间系列。请参阅 flags 参数值

描述

Clip 函数都采用时间系列以及范围的起始点和结束点。

对于规则的时间系列,起始点和结束点可以是整数,也可以是时间戳记。如果起始点是整数,那么它是时间系列中条目的绝对偏移量。如果是时间戳记,那么 Clip 函数使用时间系列的日历来查找对应于该时间戳记的偏移量。如果时间系列中请求的时间戳记处正好没有条目,那么 Clip 使用紧跟在指定时间戳记后面的日历时间戳记作为范围的起始点。

结束点的使用方式和起始点相同,只是指定范围的结尾而不是开头。起始点和结束点可以是 NULL,在这种情况下将使用时间系列的开头和结尾。

对于不规则的时间系列,只允许使用时间戳记作为起始点和结束点。

开头和结尾偏移量的数据将包括在生成的时间系列中。

flags 参数值

flags 参数是可选参数,用于确定:
  • 生成的时间系列的原点
  • 是否将隐藏的元素复制到生成的时间系列,以及这些元素在新的时间系列中是隐藏还是显示

如果 flags 参数未设置(采用缺省值 0),那么生成的时间系列的原点为 begin_range 参数和输入时间系列原点中较晚的一个。如果标志设置为 1,那么生成的时间系列的原点设置为 begin_offsetbegin_range 参数和输入时间系列原点中较早的一个。在这种情况下,早于时间系列原点的时间点都设置为 NULL

剪切包含隐藏元素的范围时,缺省情况下,隐藏的元素不会复制到生成的时间系列。flags 参数允许将隐藏的元素包括在结果中。还可以将元素标记为在生成的时间系列中隐藏或显示。

要将数据抽取到新的时间系列并将隐藏的元素包括在该时间范围,而且在生成的时间系列中保持这些元素为隐藏状态,请将 flags 参数设置为 2
Clip(ts, begin, end, 2)

在本示例中,ts 是要剪切的时间系列,beginend 是用于标记要抽取的范围的时间点。

要将数据抽取到新的时间系列并将隐藏的元素包括在该时间范围,而且在生成的时间系列中显示隐藏的元素,请将 flags 参数设置为 6
Clip(ts, begin, end, 6)

在本示例中,ts 是要剪切的时间系列,beginend 是用于标记要抽取的范围的时间点。

可以将用于处理隐藏元素的 flags 参数和用于确定所生成时间系列原点的选项结合使用。例如,如果将 flags 参数设置为 3,那么 Clip 函数会将隐藏的元素包括在生成的时间系列中,这些元素将标记为隐藏,而且生成的时间系列的原点是为 Clip 函数指定的 begin_offset 和输入时间系列原点中较早的一个:
Clip(ts, begin, end, 3)

返回结果

仅包含请求范围中的数据的新时间系列。新系列与原始系列具有相同的日历,但原点和条目数可能不同。

示例

对于规则的和不规则的时间系列,Clip 函数的结果略有不同。

示例 1:规则的时间系列

以下查询从时间系列中抽取数据,并创建包含单周的指定股票数据的表:
create table week_1_analysis (stock_id int, stock_data 
   TimeSeries(stock_bar));
insert into week_1_analysis
    select stock_id,
   Clip(stock_data,
      '2011-01-03 00:00:00.00000'
       ::datetime year to fraction(5),
      '2011-01-07 00:00:00.00000'
       ::datetime year to fraction(5))
from daily_stocks
where stock_name = 'GBase';
以下查询显示时间系列中指定股票的前六个条目:
select Clip(stock_data, 0, 5)
from daily_stocks
where stock_name = 'GBase';

示例 2:不规则的时间系列

不规则的时间系列具有以下值:

2005-12-17 10:23:00.00000  26.46
2006-01-03 13:19:00.00000  27.30
2006-01-04 13:19:00.00000  28.67
2006-01-09 13:19:00.00000  30.56

以下语句从时间系列中抽取五天时间段的数据:

EXECUTE FUNCTION Transpose ((
  select Clip(
      tsdata,
      "2006-01-01 00:00:00.00000"::datetime year to fraction (5),
      "2006-01-05 00:00:00.00000"::datetime year to fraction (5),
      0)
  from ts_tab
  where station_id = 228820)) ;

生成的不规则时间系列如下所示:

2006-01-01 00:00:00.00000  26.46
2006-01-03 13:19:00.00000  27.30
2006-01-04 13:19:00.00000  28.67

第一个值包含剪切的开始日期和第一个原始值的值。因为时间系列是不规则的,所以一个值会在下一个元素出现之前保持不变。因此,值 26.46 在 2006-01-01 仍然有效。