如果我只是写一些类似的东西
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
谁能解释一下?
最初,我想要做的就是避免编写强制转换语句,假设 123.866 是隐式小数。所以我想测试一下这两个语句是否相同:
select cast(123.866 as decimal)
select 123.866
最佳答案
除了@David M的回答,这里有一种直接查找类型的方法,在这里找到:less than dot: How to implement a typeof operator in SQL by using sql_variant_property :
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
请注意,我在 SQL Server 2008 而非 2005 上对此进行了测试。我希望该功能在 2005 年可用。
numeric
进一步描述如下:Data Types (Transact SQL) ,这里是:decimal and numeric (Transact-SQL) .
关于sql-server - SQL server 2005中 "select 123.866"的数据类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1174406/