将Inf、NAN和-Inf插入sqlite3数据库的SQL命令

k4emjkb1  于 2023-06-23  发布在  SQLite
关注(0)|答案(2)|浏览(168)

在sqlite3数据库表中,将无穷大、负无穷大和非数字插入真实的类型列的sql命令是什么?
即,用什么来代替value 1、value 2?

INSERT INTO table (column1,column2 ,..)
VALUES( value1, value2 ,...);

我试着在sqlite3 documentation上找到这方面的资源,但找不到任何东西。
插入“Inf”和“-Inf”作为字符串并通过C++阅读它会给我一个小的-0.00...价值

iyzzxitl

iyzzxitl1#

任何超出双精度浮点数范围的数字都会自动转换为±无穷大,例如。1e999将作为无穷大的文字值:

sqlite> create table foo(x real);
sqlite> insert into foo values (-1e999),(-1e308),(0),(1e308),(1e999);
sqlite> .mode quote
sqlite> select * from foo order by x;
-Inf
-9.9999999999999996322e+307
0.0
9.9999999999999996322e+307
Inf

请注意,这些是实际数值±无穷大值。文本字符串将按照数字排序,并在输出模式quote中引用:

sqlite> insert into foo values ('Inf'),('-Inf');
sqlite> select * from foo order by x;
-Inf
-9.9999999999999996322e+307
0.0
9.9999999999999996322e+307
Inf
'-Inf'
'Inf'

我不确定你是否真的可以存储一个NaN。至少看起来,任何计算结果为NaN的数值表达式都会隐式转换为NULL:

sqlite> select (0*1e999);
NULL
sqlite> select (1e999-1e999);
NULL

虽然我不确定如果通过C API直接提供NaN是否也会发生这种情况。

wmtdaxz3

wmtdaxz32#

您可以将-Infinity+Infinity插入到real数据类型以及NaN等,如文档中所述:

create table input (numbers real);
insert into input values ('-Infinity');
insert into input values ('+Infinity');

但在你的c中,我认为你必须自己处理,比如当你看到'+ inf'或'+ infinity'时

相关问题