Du kan bruge noget som dette:
declare @v sql_variant
set @v=0.1242311
select SQL_VARIANT_PROPERTY(@v, 'Scale') as Scale
Dette vil returnere 7
.
Jeg forsøgte at få ovenstående forespørgsel til at fungere med en float
kolonne, men kunne ikke få det til at fungere som forventet. Det virker kun med en sql_variant
kolonne som du kan se her:http://sqlfiddle.com/#!6/5c62c/ 2
Så jeg fortsatte med at finde en anden måde og byggede på dette svar , jeg fik dette:
SELECT value,
LEN(
CAST(
CAST(
REVERSE(
CONVERT(VARCHAR(50), value, 128)
) AS float
) AS bigint
)
) as Decimals
FROM Numbers
Her er en SQL Fiddle til at teste dette af:http://sqlfiddle.com/#!6/ 23d4f/29
For at tage højde for det lille særpræg er her en modificeret version, der vil håndtere tilfældet, når flydende værdi ikke har nogen decimaldel:
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
Her er den medfølgende SQL Fiddle:http://sqlfiddle.com/#!6/10d54/11