如何在DuckDB的REAL/FLOAT4类型列中插入Infinity、NaN等特殊浮点值
DuckDB插入特殊浮点值(Infinity/-Infinity/NaN)的解决方法
报错原因
DuckDB的隐式类型转换规则比PostgreSQL更严格,直接传入带引号的特殊值字符串时,系统不会自动将其识别为浮点特殊值,因此会抛出字符串转FLOAT失败的错误。
可用插入方案
方案1:显式类型转换
对字符串常量强制声明浮点类型即可匹配官方文档的用法:
-- FLOAT/REAL两种类型转换均可 INSERT INTO table_1 VALUES ('Infinity'::REAL); INSERT INTO table_1 VALUES ('-Infinity'::REAL); INSERT INTO table_1 VALUES ('NaN'::REAL);
方案2:使用内置常量函数(更推荐,无字符串转义风险)
DuckDB提供了专用的内置函数直接生成对应特殊值,无需处理字符串转换逻辑:
INSERT INTO table_1 VALUES (inf()); -- 正无穷 INSERT INTO table_1 VALUES (-inf()); -- 负无穷 INSERT INTO table_1 VALUES (nan()); -- 非数字
验证插入结果
执行以下查询即可确认特殊值插入成功:
SELECT col_1, isinf(col_1) AS 是否为无穷值, isnan(col_1) AS 是否为NaN FROM table_1;
内容的提问来源于stack exchange,提问作者Hawk
相关产品推荐
相关产品推荐

