sql server 2008中的数字文字

时间:2012-09-19 03:06:23

标签: sql-server-2008-r2

sql server分配给数字文字的类型是什么:2.,即2后跟一个点?

我很好奇,因为:

select convert(varchar(50), 2.)
union all
select convert(varchar(50), 2.0)

返回:

2
2.0

这让我问到2和2.0类型之间的区别是什么?

Sql server似乎通过查找可以容纳该数字的最小存储类型,根据数字本身将类型分配给数字文字。值1222333存储为int,而1152921504606846975存储为big int。

感谢

编辑:我还想补充为什么这么重要。在sql server 2008 r2中,选择2/5返回0,而select 2./5返回0.4,这是由于sql server处理这些类型的方式。在oracle和Access中选择2/5(oracle:从虚拟中选择2/5)返回0.4。这是应该的方式。我想知道他们是否在sql server 2012中修复了这种行为。如果他们这样做我会感到惊讶。

1 个答案:

答案 0 :(得分:0)

此脚本可能会回答我的问题。 2.的类型是数字(1,0)。

create table dbo.test_type (field sql_variant)
go

delete from dbo.test_type
go

INSERT INTO dbo.test_type
VALUES (2.);

INSERT INTO dbo.test_type
VALUES (2.0);


SELECT field
     , sql_variant_property (field
                           , 'BaseType')
         AS BaseType
     , sql_variant_property (field
                           , 'Precision')
         AS Precision
     , sql_variant_property (field
                           , 'Scale')
         AS Scale
  FROM dbo.test_type

它返回:

2     numeric   1   0
2.0   numeric   2   1

这就是为什么当2.0转换为varchar时,结果为2.0。 Sql server似乎记录了精度。