Можете да използвате нещо подобно:
declare @v sql_variant
set @v=0.1242311
select SQL_VARIANT_PROPERTY(@v, 'Scale') as Scale
Това ще върне 7
.
Опитах се да накарам горната заявка да работи с float
колона, но не успя да я накара да работи според очакванията. Работи само с sql_variant
колона, както можете да видите тук:http://sqlfiddle.com/#!6/5c62c/ 2
И така, продължих да намирам друг начин и надградих този отговор , получих това:
SELECT value,
LEN(
CAST(
CAST(
REVERSE(
CONVERT(VARCHAR(50), value, 128)
) AS float
) AS bigint
)
) as Decimals
FROM Numbers
Ето SQL Fiddle, за да тествате това:http://sqlfiddle.com/#!6/ 23d4f/29
За да отчетем тази малка странност, ето модифицирана версия, която ще се справи със случая, когато плаващата стойност няма десетична част:
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
Ето придружаващия SQL Fiddle:http://sqlfiddle.com/#!6/10d54/11