Flux查询条件赋值变量报duration比较错误的解决方法
错误原因
Flux 语法规则中不支持直接对两个 duration(时长)类型的值做==相等比较,这是抛出unsupported binary expression duration == duration错误的核心原因。另外原代码中直接书写的2022-01-01没有做时间类型声明,会被Flux解析为整数减法运算(计算结果为2020),本身也不符合时间值的书写规范。
正确实现方案
对duration类型做比较时,需要先通过uint()函数将时长值转换为以纳秒为单位的无符号整数,再做相等判断;固定时间字面量需要通过time()函数显式转换为时间类型。
正确代码示例:
WINDOW = 1d START = if uint(v: WINDOW) == uint(v: 1d) then today() else time(v: "2022-01-01")
相关语法注意事项
- 所有duration类型的比较(相等、大小判断)都需要先转换为
uint类型再运算,直接比较两个duration值都会触发类型不支持的错误 - 书写固定时间值时,必须用
time()包裹符合日期/RFC3339格式的字符串,直接写yyyy-MM-dd格式的内容会被识别为算术表达式,返回错误的计算结果 - 该时长比较方法对所有单位的duration生效,比如判断
1h和60m是否相等时,uint(v: 1h) == uint(v: 60m)会正确返回true
内容的提问来源于stack exchange,提问作者Alfred Elkerbout
相关产品推荐
相关产品推荐

