InfluxDB:数学运算后如何将结果转换为整数?
解决InfluxDB中运算后将结果转为整数写入整数字段的问题
我明白你遇到的棘手问题了——想把整数字段的值除以10后转成整数存回去,但之前试的方法要么返回浮点数触发类型冲突,要么语法根本不对。别着急,InfluxQL其实有专门的函数能搞定这个场景:
正确的解决方案
用InfluxQL内置的toInt()函数,它能把浮点数值转换成真正的整数类型,完美匹配你现有的整数字段。给你几个实用的示例语句:
如果只想直接截断小数部分(比如15*0.1=1.5,转成1):
SELECT toInt(water_level * 0.1) AS water_level INTO "h2o_feet" FROM "h2o_feet"
如果需要先四舍五入再转整数(比如1.5转成2):
SELECT toInt(round(water_level * 0.1)) AS water_level INTO "h2o_feet" FROM "h2o_feet"
如果要严格截断小数(不管小数部分是多少都舍去):
SELECT toInt(trunc(water_level * 0.1)) AS water_level INTO "h2o_feet" FROM "h2o_feet"
为什么之前的方法没效果?
round()和trunc():这俩函数的返回值本质还是浮点数,哪怕结果是2.0这种整数形式,类型依然是float,写入integer字段自然会触发类型冲突。(water_level*0.1)::integer:这是PostgreSQL这类数据库的类型转换语法,但InfluxQL不支持这种写法,所以会报错。
额外提醒
因为你是直接写入原表h2o_feet,执行前最好确认:
- 是否需要保留原始数据?如果需要,建议先把原始数据备份到临时表,再执行转换写入。
toInt()函数默认会直接丢弃小数部分(不配合round/trunc的话),和你预期的“丢失精度”行为完全一致。
内容的提问来源于stack exchange,提问作者Golgot
相关产品推荐
相关产品推荐

