如何在 SQL Server 数据库中存储非常小的值 (E-314)?

Pra*_*vin 3 sql-server floating-point

我使用以下查询创建了包含小浮动值的表

create table temp_data (val float)

但是当它给出非常小的值的警告消息时 (e-314)

insert into temp_pce_rank_data values(2.466987305926227e-314)

数据被插入并带有值'0'警告消息是:The floating point value '2.466987305926227e-314' is out of the range of computer representation (8 bytes).

如何在 SQL Server 数据库中存储和检索非常小的值 (E-314)?谢谢

ype*_*eᵀᴹ 7

提供的数字类型 ( float, decimal) 都不能存储这么小的数字。您拥有的示例2.466987305926227e-314小于最小的正常双精度浮点数

如果你想存储这样的数字,我看到两个选项:

  • 使用包含两列的自定义解决方案,一列用于尾数,另一列用于指数。缺点是您必须使用复杂的表达式(即使是加法)来执行所有数学运算符和函数。

  • 使用自定义CLR 用户定义类型。从该页面:

从 SQL Server 2005 开始,您可以使用用户定义类型 (UDT) 来扩展服务器的标量类型系统,从而可以在 SQL Server 数据库中存储 CLR 对象。UDT 可以包含多个元素并且可以具有行为,这将它们与由单个 SQL Server 系统数据类型组成的传统别名数据类型区分开来。

由于 UDT 由整个系统访问,因此它们用于复杂数据类型可能会对性能产生负面影响。复杂数据通常最好使用传统的行和表进行建模。SQL Server 中的 UDT 非常适合以下情况

日期、时间、货币和扩展数字类型

地理空间应用

编码或加密数据