Můžete použít něco takového:
declare @v sql_variant
set @v=0.1242311
select SQL_VARIANT_PROPERTY(@v, 'Scale') as Scale
To vrátí 7
.
Snažil jsem se, aby výše uvedený dotaz fungoval s float
sloupec, ale nemohlo to fungovat podle očekávání. Funguje pouze s sql_variant
sloupec, jak můžete vidět zde:http://sqlfiddle.com/#!6/5c62c/ 2
Přistoupil jsem tedy k nalezení jiného způsobu a na základě této odpovědi , mám toto:
SELECT value,
LEN(
CAST(
CAST(
REVERSE(
CONVERT(VARCHAR(50), value, 128)
) AS float
) AS bigint
)
) as Decimals
FROM Numbers
Zde je SQL Fiddle k otestování:http://sqlfiddle.com/#!6/ 23d4f/29
Abychom zohlednili tento malý vtípek, zde je upravená verze, která si poradí s případem, kdy hodnota float nemá desetinnou část:
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
Zde je doprovodný SQL Fiddle:http://sqlfiddle.com/#!6/10d54/11