Как мне вставить бесконечные значения в столбцы REAL / FLOAT4 в DuckDB?
Скажем, у меня есть таблица с именем table_1 с одним столбцом с именем col_1, который имеет тип REAL / FLOAT4 в DuckDB. Как мне вставить в col_1 специальные значения с плавающей запятой, такие как -Infinity, NaN и Infinity? Я пробовал вставлять эти значения разными способами, но безуспешно. Мне удалось получить значения для вставки в таблицу PostgreSQL, но не с помощью DuckDB, хотя у них обоих одинаковое описание для обновления этих значений на своих веб-страницах. Например, вот несколько примеров операторов вставки, которые работают в моей таблице PostgreSQL, но не работают в моей таблице DuckDB.
INSERT INTO table_1 VALUES ('Infinity');
INSERT INTO table_1 VALUES ('-Infinity');
INSERT INTO table_1 VALUES ('NaN');
Ниже приводится описание специальных значений с плавающей запятой в DuckDB. Я также разместил ссылки на описания обеих баз данных для числового типа, которые включают описание специальных значений с плавающей запятой.
"Помимо обычных числовых значений, типы с плавающей запятой имеют несколько специальных значений:
Infinity
-Infinity
NaN
Они представляют специальные значения IEEE 754 «бесконечность», «отрицательная бесконечность» и «не число», соответственно. (На машине, чья арифметика с плавающей запятой не соответствует стандарту IEEE 754, эти значения, вероятно, не будут работать должным образом.) При записи этих значений в виде констант в команде SQL вы должны заключить их в кавычки, например: UPDATE table SET x = '-Бесконечность'. При вводе эти строки распознаются без учета регистра ».
DuckDB Numerichttps://duckdb.org/docs/sql/data_types/numeric
PostgreSQL Numerichttps://www.postgresql.org/docs/current/datatype-numeric.html
1 ответ
В DuckDB мы не разрешаем хранить в столбцах специальные числа с плавающей запятой.
Это просто усложняет некоторые алгоритмы и (я слышал, что) это технически не разрешено в стандарте SQL (хотя я никогда не проверял это сам).