Je kunt zoiets als dit gebruiken:
declare @v sql_variant
set @v=0.1242311
select SQL_VARIANT_PROPERTY(@v, 'Scale') as Scale
Dit retourneert 7
.
Ik heb geprobeerd de bovenstaande query te laten werken met een float
column, maar kreeg het niet werkend zoals verwacht. Het werkt alleen met een sql_variant
kolom zoals je hier kunt zien:http://sqlfiddle.com/#!6/5c62c/ 2
Dus ging ik verder met het vinden van een andere manier en bouwde ik voort op dit antwoord , ik heb dit:
SELECT value,
LEN(
CAST(
CAST(
REVERSE(
CONVERT(VARCHAR(50), value, 128)
) AS float
) AS bigint
)
) as Decimals
FROM Numbers
Hier is een SQL Fiddle om dit uit te testen:http://sqlfiddle.com/#!6/ 23d4f/29
Om rekening te houden met die kleine gril, hier is een aangepaste versie die het geval zal behandelen wanneer de float-waarde geen decimaal deel heeft:
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
Hier is de bijbehorende SQL Fiddle:http://sqlfiddle.com/#!6/10d54/11