为什么 ResultFloat = 0 在下面的查询中?
我在cast/convert、sql_variant文档中遗漏了一点吗?
declare
@v sql_variant = convert(decimal(28,8), 20.0);
select sql_variant_property(@v, 'BaseType') as BaseType, -- 'decimal',
iif(convert(int, 10.0) < @v, 1, 0) as ResultInt, -- 1
iif(convert(decimal, 10.0) < @v, 1, 0) as ResultDecimal, -- 1
iif(convert(float, 10.0) < @v, 1, 0) as ResultFloat, -- 0 !
iif(convert(float, 10.0) < convert(float, @v), 1, 0) as ResultFloatFloat, -- 1
iif(convert(float, 10.0) < convert(decimal(28,8), @v), 1, 0) as ResultFloatDecimal; -- 1
数据库服务器 2012
从sql_variant (Transact-SQL)
基本数据类型系列
@v
是精确数值,基本数据类型系列convert(float, 10.0)
是近似数值。近似数值在层次结构图中高于精确数值,因此当您比较两个 sql_variant 值时,其中一个是近似数值,另一个是精确数值,近似数值总是被认为更大。
完整的层次顺序是