Por que ResultFloat = 0 na consulta abaixo?
Estou perdendo um ponto nos documentos 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
SQL Server 2012
De sql_variant (Transact-SQL)
A família de tipo de dados base para
@v
é Numérico exato e a família de tipo de dados base paraconvert(float, 10.0)
é Numérico aproximado.O numérico aproximado está mais acima no gráfico de hierarquia do que o numérico exato, portanto, quando você compara dois valores sql_variant em que um é numérico aproximado e o outro é numérico exato, o valor numérico aproximado sempre será considerado maior.
A ordem hierárquica completa é