1

尝试从 TADOQuery 包装器对象执行以下 SQL 查询时遇到问题:

SELECT * 
FROM obj
WHERE ObjectType = 'user' 
  AND ( ((( valueOne > 6.13661152336E-318 ) and ( valueTwo < 1.68611310981 )

问题显然ValueOne是太小了,因此无法在正常的 64 位机器精度内表示。问题是我从文件中读取了这些值,但我无法控制我得到的输入数据。我会实施一个舍入过程来处理这个问题,但我不确定 SQL Server 2012 Express 中哪个是最小(绝对值)可表示数字。

谁能帮我解决这个问题

4

1 回答 1

2

Decimal and numeric

固定精度和比例数字。使用最大精度时,有效值从 - 10^38 +1 到 10^38 - 1

float and real

浮动范围:- 1.79E+308 至 -2.23E-308、0 和 2.23E-308 至 1.79E+308
实际范围:- 3.40E + 38 至 -1.18E - 38、0 和 1.18E - 38 至 3.40E + 38

int, bigint, smallint, and tinyint

bigint 范围:-2^63 (-9,223,372,036,854,775,808) 到 2^63-1 (9,223,372,036,854,775,807)
int 范围:-2^31 (-2,147,483,648) 到 2^31-1 (2,147,483,647)
smallint 范围:-2^5-32 ) 到 2^15-1 (32,767)
tinyint 范围:0 到 255

6.13661152336E-318在 SQL Server 中可表示为本机 SQL Server 支持的类型的范围之外。您可以尝试使用CLR 用户定义类型。您将需要一个自定义 CLR 库来操作这些极值。

于 2013-03-01T13:42:44.503 回答