ts_closest_elem() 函数

ts_closest_elem() 函数返回第一个元素或非空且最接近给定时间戳记的元素的列。

语法

ts_tselem
ts_closest_elem(ts_tsdesc *tdesc, 
       mi_datetime       *tstamp,
       mi_string         *cmp, 
       mi_string         *col_list,
       mi_integer         flags, mi_integer *isNull,
       mi_integer        *off)
tdesc
ts_open 返回的时间系列描述符。
tstamp
开始搜索的时间戳记。
cmp
比较运算符。cmp 的有效值包括 <、<=、=、==、>= 和 >。
col_list
要搜索具有特定非空列集的元素,请指定列名称的列表,以竖线 (|) 分隔。如果时间系列子行类型中不存在任何列名称,会发生错误。

要搜索非空元素,请将 col_list 设置为 NULL

flags
确定是否应返回隐藏的元素。flags 参数的有效值在 tseries.h 中定义。它们包括:
  • TS_CLOSEST_NO_FLAGS(无特殊标志)
  • TS_CLOSEST_RETNULLS_FLAGS(返回隐藏的元素)
isNull
isNull 参数不能为 NULL。返回时,使用 tseries.h 中找到的空指示符位设置该参数。包括:
  • 0(不隐藏并分配元素)
  • TS_NULL_NOTALLOCED(元素未写入)
  • TS_NULL_HIDDEN(隐藏的元素)
off
当时间系列为规则时间系列时,如果 off 不是 NULL,那么将在 off 参数中返回已返回元素的偏移量。

描述

ts_closest_elem 所使用的搜索算法如下所示:
  • 如果 cmp 是 <=、=、== 或 >= 之一,那么搜索会从 tstamp 开始。
  • 如果 cmp 是 <,那么搜索会从 tstamp 之前的第一个元素开始。
  • 如果 cmp 是 >,那么搜索会从 tstamp 之后的第一个元素开始。
tstampcmp 参数用于确定搜索开始的位置。搜索以 cmp 指示的方向持续进行,直到找到符合条件的元素。如果没有符合条件的元素,那么返回值为 NULL
重要: 对于不规则的时间系列,不规则元素中的值在下一个元素出现之前保持不变。这表示不规则时间系列上的任一先前“equals”操作将查找 <= first。如果 cmp 是 >= 且 <= 操作失败,那么该操作会转向下一个元素;否则,返回 NULL

返回结果

满足所描述的条件的元素。