Jef*_*ang 3 sql-server types casting sql-server-2005
如果我只是写类似的东西
select 10.00;
Run Code Online (Sandbox Code Playgroud)
这给了我什么类型的?
这是我运行的测试,用于测试这些类型的二进制表示.这里最大的惊喜是没有一个演员实际上与第一排匹配!
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
Run Code Online (Sandbox Code Playgroud)
有谁能解释一下?
最初,我想要做的就是避免编写演员声明,假设123.866隐式为小数.所以我想测试这两个语句是否相同:
select cast(123.866 as decimal)
select 123.866
Run Code Online (Sandbox Code Playgroud)
除了@David M的回答之外,这里有一种直接找到类型的方法,在这里找到:小于点:如何使用sql_variant_property在SQL中实现typeof运算符:
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
Run Code Online (Sandbox Code Playgroud)
这给了我这个答案:
Type Precision Type
numeric 6 3
Run Code Online (Sandbox Code Playgroud)
请注意,我在SQL Server 2008上测试了这个,而不是2005年.我希望该功能在2005年可用.
numeric这里进一步描述:数据类型(Transact SQL),这里:十进制和数字(Transact-SQL).