Puedes usar algo como esto:
declare @v sql_variant
set @v=0.1242311
select SQL_VARIANT_PROPERTY(@v, 'Scale') as Scale
Esto devolverá 7
.
Traté de hacer que la consulta anterior funcionara con un float
columna pero no pudo hacer que funcionara como se esperaba. Solo funciona con un sql_variant
columna como puede ver aquí:http://sqlfiddle.com/#!6/5c62c/ 2
Entonces, procedí a encontrar otra forma y me basé en esta respuesta , obtuve esto:
SELECT value,
LEN(
CAST(
CAST(
REVERSE(
CONVERT(VARCHAR(50), value, 128)
) AS float
) AS bigint
)
) as Decimals
FROM Numbers
Aquí hay un SQL Fiddle para probar esto:http://sqlfiddle.com/#!6/ 23d4f/29
Para dar cuenta de esa pequeña peculiaridad, aquí hay una versión modificada que manejará el caso cuando el valor flotante no tenga una parte decimal:
SELECT value,
Decimals = CASE Charindex('.', value)
WHEN 0 THEN 0
ELSE
Len (
Cast(
Cast(
Reverse(CONVERT(VARCHAR(50), value, 128)) AS FLOAT
) AS BIGINT
)
)
END
FROM numbers
Aquí está el SQL Fiddle que lo acompaña:http://sqlfiddle.com/#!6/10d54/11