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;
Clip 函数都采用时间系列以及范围的起始点和结束点。
对于规则的时间系列,起始点和结束点可以是整数,也可以是时间戳记。如果起始点是整数,那么它是时间系列中条目的绝对偏移量。如果是时间戳记,那么 Clip 函数使用时间系列的日历来查找对应于该时间戳记的偏移量。如果时间系列中请求的时间戳记处正好没有条目,那么 Clip 使用紧跟在指定时间戳记后面的日历时间戳记作为范围的起始点。
结束点的使用方式和起始点相同,只是指定范围的结尾而不是开头。起始点和结束点可以是 NULL,在这种情况下将使用时间系列的开头和结尾。
对于不规则的时间系列,只允许使用时间戳记作为起始点和结束点。
开头和结尾偏移量的数据将包括在生成的时间系列中。
如果 flags 参数未设置(采用缺省值 0),那么生成的时间系列的原点为 begin_range 参数和输入时间系列原点中较晚的一个。如果标志设置为 1,那么生成的时间系列的原点设置为 begin_offset 或 begin_range 参数和输入时间系列原点中较早的一个。在这种情况下,早于时间系列原点的时间点都设置为 NULL。
剪切包含隐藏元素的范围时,缺省情况下,隐藏的元素不会复制到生成的时间系列。flags 参数允许将隐藏的元素包括在结果中。还可以将元素标记为在生成的时间系列中隐藏或显示。
Clip(ts, begin, end, 2)
在本示例中,ts 是要剪切的时间系列,begin 和 end 是用于标记要抽取的范围的时间点。
Clip(ts, begin, end, 6)
在本示例中,ts 是要剪切的时间系列,begin 和 end 是用于标记要抽取的范围的时间点。
Clip(ts, begin, end, 3)
仅包含请求范围中的数据的新时间系列。新系列与原始系列具有相同的日历,但原点和条目数可能不同。
对于规则的和不规则的时间系列,Clip 函数的结果略有不同。
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';
不规则的时间系列具有以下值:
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 仍然有效。