2009-07-23 60 views
3

如果我只是喜欢写东西SQL server 2005中“select 123.866”的数据类型是什么?

select 10.00; 

什么类型的这是否能给我吗?

这是我运行的一个测试,来测试这些类型的二进制表示。这里最大的惊喜是没有一个演员阵容真的与第一排相匹配!

select cast(123.866 as binary) union all 
select cast(cast(123.866 as real) as binary) union all 
select cast(cast(123.866 as float) as binary) union all 
select cast(cast(123.866 as decimal) as binary) union all 
select cast(cast(123.866 as numeric) as binary) union all 
select cast(cast(123.866 as money) as binary) union all 
select cast(cast(123.866 as smallmoney) as binary) 

-------------- 
0x0000000000000000000000000000000000000000000006030001DAE30100 
0x000000000000000000000000000000000000000000000000000042F7BB64 
0x00000000000000000000000000000000000000000000405EF76C8B439581 
0x00000000000000000000000000000000000000000000120000017C000000 
0x00000000000000000000000000000000000000000000120000017C000000 
0x00000000000000000000000000000000000000000000000000000012E684 
0x00000000000000000000000000000000000000000000000000000012E684 

任何人都可以解释这一点吗?


最初,我想要做的就是避免必须编写cast语句,假设123.866是隐式小数。所以我想,以测试,如果这两个语句是相同的:

select cast(123.866 as decimal) 
select 123.866 

回答

6

它是隐式类型为十进制(6,3) - 转换成这一点,你会看到的二进制值匹配。它似乎在最小的tpe处使用小数来适合该值 - 在这种情况下,包含小数点后3位的6位数字。

+0

良好的通话,这是答案。你从哪里得到这些信息? – 2009-07-23 20:54:33

+0

从提供的二进制文件中获得教育猜测,其中包含0603十六进制,然后以相反顺序排列整数值123866的二进制表示。然后在Management Studio中进行验证。 – 2009-07-23 20:56:21

0

您确定要将其转换为查询吗?当你选择结果时,下一步要处理它呢?如果它是一个应用程序,请让代码正确地确定并转换类型(如果需要)。如果是另一个查询,您可能可以传递它,而不会有任何问题。

8

除了@David M的答案,这里是直接找到的类型的方式,发现这里:这给了我这个答案

select 
    CAST(SQL_VARIANT_PROPERTY(123.866, 'BaseType') AS VARCHAR(20)) AS Type, 
    CAST(SQL_VARIANT_PROPERTY(123.866, 'Precision') AS INT) AS Precision, 
    CAST(SQL_VARIANT_PROPERTY(123.866, 'Scale') AS INT) AS Scale 

:我测试

Type  Precision Type 
numeric 6   3 

less than dot: How to implement a typeof operator in SQL by using sql_variant_property这在SQL Server 2008上,而不是在2005年。我希望该功能在2005年有效。

numeric在此进一步描述:Data Types (Transact SQL),和这里:decimal and numeric (Transact-SQL)

+0

SS2005的结果相同,所以是的功能存在那里。 – DaveE 2009-07-23 21:08:56

1

在你的测试中,你正在使用union all。你知道所有的值将被转换为联合查询中的相同数据类型吗?

SQL Server Precision and Scale problems

本文还演示了当你把各种数据类型一起会发生什么。

相关问题