【问题标题】:On creating a table column of type "float with precision" column gets created as "real" type in SQL server在创建“精确浮点”类型的表列时,在 SQL Server 中将列创建为“真实”类型
【发布时间】:2023-03-19 11:31:02
【问题描述】:

我创建了一个简单的表格如下:

create table table1
(
col1 float(1),
col2 float
)

当我使用 sp_help 或 script table as create 检查表定义时, 我将 float(1) 视为真实的

CREATE TABLE [dbo].[table1](
[col1] [real] NULL,
[col2] [float] NULL
)

根据我对msdnstackoverflow 参考资料的理解,float 的精度 n 可以在 1 到 53 之间。

为什么只要指定了精度浮点数就会默认转换为实数?

【问题讨论】:

    标签: sql sql-server types sql-server-2016


    【解决方案1】:

    SQL Server 不记得您在创建表时使用的语言 - 它只是参考当前表定义并呈现一段可以用于创建相同表的文本。

    正如documentation 指出的那样,SQL Server 不支持任意精度 - 它只支持两种精度 - 24 和 53:

    SQL Server 将n 视为两个可能值之一。如果 124,n 被视为 24。如果 2553,n 被视为 53

    正如它还指出的那样,real 被视为float(24) 的同义词:

    real 的 ISO 同义词是 float(24)

    因此,任何指定精度为 24 或更低的浮点列实际上都将创建为 float(24)float(24) 的同义词是 real。系统不记得最初指定为float(1)float(24)还是real


    为什么在指定精度时默认将其转换为实数?

    它没有。如上所述,如果您创建一个类型为float(25)(或任何更高精度)的列,您会发现它返回为纯float,而不是real,因为它是作为float(53) 创建的没有提供时,默认精度为 53。

    【讨论】:

      猜你喜欢
      • 2012-10-27
      • 1970-01-01
      • 2019-07-27
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 2010-11-05
      相关资源
      最近更新 更多