Sql server SQL Server将科学表示法(指数表示法)字符串转换为数字

Sql server SQL Server将科学表示法(指数表示法)字符串转换为数字,sql-server,tsql,sql-server-2012,Sql Server,Tsql,Sql Server 2012,我想了解以下T-SQL语句: DECLARE@snvarchar(16)=N'1.377532E-39'; 选择@s作为[orig] ,将(REAL,@s)转换为[REAL] ,将(FLOAT,@s)转换为[FLOAT] --,将(数字(2,0),@s)转换为[数字直接] /*不工作:Msg 8114,16级,状态5*/ ,将(数字(2,0),转换(浮点,@s))转换为[通过浮点转换为数字]; 我想要的输出是一个精度为数值(2,0)的值(在本例中为0)。直接转换不起作用;我必须先从NVARCH

我想了解以下T-SQL语句:

DECLARE@snvarchar(16)=N'1.377532E-39';
选择@s作为[orig]
,将(REAL,@s)转换为[REAL]
,将(FLOAT,@s)转换为[FLOAT]
--,将(数字(2,0),@s)转换为[数字直接]
/*不工作:Msg 8114,16级,状态5*/
,将(数字(2,0),转换(浮点,@s))转换为[通过浮点转换为数字];
我想要的输出是一个精度为
数值(2,0)
的值(在本例中为0)。直接转换不起作用;我必须先从
NVARCHAR
转换为
FLOAT
,然后从
FLOAT
转换为
NUMERIC(2,0)


如果字符串不包含科学符号数字,则直接转换有效。我想知道为什么?谢谢你们的提示。

据我所知,这仅仅是一个能够将表示科学符号的字符串转换为数字的问题,而计算机则不能。一旦Float将科学记数法中的数字转换为数字(与表示数字的字符串相反),Numeric就可以处理转换

在和数据类型的文档中,两者都提到了使用科学符号,但这是为了定义数据类型可接受的最小值和最大值。浮动文件中规定:

Conversion of float values that use scientific notation to decimal or
numeric is restricted to values of precision 17 digits only. Any value 
with precision higher than 17 rounds to zero.
这表明Float可以解释科学记数法,而Decimal和Numeric数据类型只能处理由使用科学记数法指定的数字产生的最大精度为17的数字


我希望这是有道理的。如果您有任何问题,请留下评论。

因此,当我尝试选择CAST(5.68579E+17作为数字),然后得到结果568579000000000000。但在excel中,该值显示为568579480918736000。