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中修复了这种行为。如果他们这样做我会感到惊讶。
答案 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似乎记录了精度。