有人可以解释结果吗?
DECLARE @dec AS VARCHAR(5)
SET @dec = 'Yes'
DECLARE @val DECIMAL(15, 2);
SET @val = - 34152542256.86;
SELECT @val as c1
,CAST(@val AS BIGINT) as c2
SELECT @val as c1
,CASE @dec
WHEN 'Yes'
THEN CAST(@val AS BIGINT)
ELSE @val
END as c2
结果:
第一个选择语句的:
c1 c2
-34152542256.86 -34152542256
第二个选择语句:
c1 c2
-34152542256.86 -34152542256.00
答案 0 :(得分:2)
您的CASE
声明中有隐式转换。基本上,c2
必须具有数据类型,但SQL Server不知道它是DECIMAL(15,2)
还是BIGINT
,因为这两种类型都是从各个分支返回的通过CASE
声明。数据类型优先级的规则启动,c2
最终转换为DECIMAL(15,2)
。
答案 1 :(得分:0)
在第一个select语句中,c2的结果只能是BIGINT。 在第二个语句中,结果可以是BIGINT或DECIMAL(15,2),属于case语句的哪个分支。 由于您不能在一列中使用混合类型,sql server会自动将c2转换为DECIMAL(15,2)
答案 2 :(得分:0)
BIGINT是一个整数值(它不允许缩放),尝试使用DECIMAL或NUMERIC。 并且不要放弃阅读documentation。
答案 3 :(得分:0)
试一试,我认为这可能适用于这种情况,请尝试sql_variant
这样的数据类型:
DECLARE @val sql_variant;