sql-server - SQL server 2005中 "select 123.866"的数据类型是什么?

标签 sql-server sql-server-2005 casting types

如果我只是写一些类似的东西

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/

相关文章:

sql - SQL Server 对 JSON 的支持是否可以替代 MongoDB 等 NoSql 解决方案?

SQL更改具有大量数据的列数据类型

sql - 为什么 nvarchar 的默认大小是 255 (MSSQL Server)?

mysql - 如何在 MySql SELECT 语句中正确使用 CAST 函数?

casting - 所有 32 位 float 都精确表示为 f64 吗?

sql - SQL Server中检测客户端断开连接

sql - 什么是更快的查询(选择名称....或选择顶部(1)名称

tsql - SQL Server 2005 - 在列后更改表

c# - 为复杂泛型类型创建类或接口(interface)

SQL 2005 插入时更新列