我创建了一个简单的表格,如下所示:
create table table1
(
col1 float(1),
col2 float
)
当我使用 sp_help 或脚本表作为创建检查表定义时,
我得到的 float(1) 是真实的
CREATE TABLE [dbo].[table1](
[col1] [real] NULL,
[col2] [float] NULL
)
据我了解msdn https://msdn.microsoft.com/en-in/library/ms173773.aspx and 堆栈溢出 https://stackoverflow.com/questions/1056323/difference-between-numeric-float-and-decimal-in-sql-server参考,float 的精度 n 范围为 1 到 53。
为什么每当 float 指定了精度时它就会默认转换为实数?
SQL Server 不记得创建表时使用的语言 - 它只是查阅当前表定义并呈现一段文本could已用于创建相同的表。
As the 文档 https://msdn.microsoft.com/en-us/library/ms173773.aspx指出,SQL Server 不支持任意精度 - 它只支持两种精度 - 24 和 53:
SQL Server 对待n
作为两个可能值之一。如果124, n
被视为24. If 2553, n
被视为53.
正如它还指出的那样,real
被视为同义词float(24)
:
ISO 同义词为real is 浮动(24).
因此,任何指定精度为 24 或更低的浮点列实际上都会被创建为float(24)
。以及同义词float(24)
is real
。系统不记得它最初是否被指定为float(1)
, float(24)
or real
.
为什么每当 float 指定了精度时它就会默认转换为实数?
事实并非如此。如上所述,如果您创建一个类型为float(25)
(或任何更高的精度),您会发现它以普通形式返回float
, 而不是real
,因为它是作为float(53)
当未提供任何精度时,53 是默认精度。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)