gpt4 book ai didi

sql-server - SQL Server 将科学记数法(指数记数法)字符串转换为数字

转载 作者:行者123 更新时间:2023-12-03 09:35:43 29 4
gpt4 key购买 nike

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

DECLARE @s NVARCHAR(16) = N'1.377532E-39';
SELECT @s AS [orig]
, CONVERT(REAL, @s) AS [real]
, CONVERT(FLOAT, @s) AS [float]
-- , CONVERT(NUMERIC(2, 0), @s) AS [numeric direct]
/* does not work: Msg 8114, Level 16, State 5 */
, CONVERT(NUMERIC(2, 0), CONVERT(FLOAT, @s)) AS [numeric via float];

我想要的输出是 NUMERIC(2,0) 的值精度(在本例中为 0)。直接转换不起作用;我必须从 NVARCHAR 转换至 FLOAT先然后从 FLOATNUMERIC(2,0) .

如果字符串不包含科学记数法数字,则直接转换有效。我想了解 为什么 ?感谢您的任何提示。

最佳答案

据我所知,这只是Float datatype的问题。能够将表示科学记数法的字符串转换为数字,而 Numeric datatype不能。一旦 Float 将科学记数法以外的数字转换为数字(而不是表示数字的字符串),则 Numeric 可以处理转换。

Float 的文档中和 Numeric数据类型,两者都引用了科学记数法的使用,但这是为了定义数据类型接受的最小值和最大值。在 Float 文档中,指出:

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 的数字。

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

关于sql-server - SQL Server 将科学记数法(指数记数法)字符串转换为数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39014474/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com