Você pode usar algo assim:
declare @v sql_variant
set @v=0.1242311
select SQL_VARIANT_PROPERTY(@v, 'Scale') as Scale
Isso retornará
7
. Eu tentei fazer a consulta acima funcionar com um
float
coluna, mas não conseguiu fazê-lo funcionar como esperado. Ele só funciona com um sql_variant
coluna como você pode ver aqui:http://sqlfiddle.com/#!6/5c62c/ 2
Então, continuei procurando outra maneira e aproveitando esta resposta , Eu tenho esse:
SELECT value,
LEN(
CAST(
CAST(
REVERSE(
CONVERT(VARCHAR(50), value, 128)
) AS float
) AS bigint
)
) as Decimals
FROM Numbers
Aqui está um SQL Fiddle para testar isso:http://sqlfiddle.com/#!6/ 23d4f/29
Para explicar essa pequena peculiaridade, aqui está uma versão modificada que lidará com o caso em que o valor float não tem 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
Aqui está o SQL Fiddle que acompanha:http://sqlfiddle.com/#!6/10d54/11