0

假设我有一个名为 table_1 的表,其中有一个名为 col_1 的列,它在 DuckDB 中属于 REAL/FLOAT4 类型。如何将 -Infinity、NaN 和 Infinity 等特殊浮点值插入 col_1?我尝试以多种不同的方式插入这些值,例如“infinity”、“+infinity”、“inf”、“+inf”等,但没有成功。我能够将值插入到 PostgreSQL 表中,但不能使用 DuckDB,即使它们在网页上使用和更新这些值的描述相同。例如,这里有一些示例插入语句,它们在我的带有 REAL 列的 PostgreSQL 表中有效,但在我的 DuckDB 表中无效。

INSERT INTO table_1 VALUES ('Infinity');
INSERT INTO table_1 VALUES ('-Infinity');
INSERT INTO table_1 VALUES ('NaN');

如果我在 DuckDB 表中使用 REAL/FLOAT4 列尝试这些查询,我会收到与此类似的错误。

转换错误:无法将字符串“Infinity”转换为 FLOAT

下面是 DuckDB 对特殊浮点值的描述。我还发布了数字类型的两个数据库描述的链接,其中包括关于特殊浮点值的描述。

“除了普通的数值,浮点类型还有几个特殊的值:

Infinity -Infinity NaN

它们分别代表 IEEE 754 特殊值“无穷大”、“负无穷大”和“非数”。(在浮点运算不遵循 IEEE 754 的机器上,这些值可能无法按预期工作。)在 SQL 命令中将这些值写为常量时,必须在它们周围加上引号,例如:UPDATE table SET x ='-无穷大'。在输入时,这些字符串以不区分大小写的方式被识别。”

DuckDB 数字 https://duckdb.org/docs/sql/data_types/numeric

PostgreSQL 数字 https://www.postgresql.org/docs/current/datatype-numeric.html

4

1 回答 1

0

在 DuckDB 中,我们不允许在列中存储特殊的浮点数。

它只是使一些算法复杂化并且(我听说)它在 SQL 标准中在技术上是不允许的(尽管我自己从未验证过)。

于 2021-09-14T19:32:49.810 回答