Puoi usare qualcosa del genere:
declare @v sql_variant
set @v=0.1242311
select SQL_VARIANT_PROPERTY(@v, 'Scale') as Scale
Questo restituirà 7
.
Ho provato a far funzionare la query sopra con un float
colonna ma non è riuscito a farlo funzionare come previsto. Funziona solo con una sql_variant
colonna come puoi vedere qui:http://sqlfiddle.com/#!6/5c62c/ 2
Quindi, ho provveduto a trovare un altro modo ea basarmi su questa answer , ho questo:
SELECT value,
LEN(
CAST(
CAST(
REVERSE(
CONVERT(VARCHAR(50), value, 128)
) AS float
) AS bigint
)
) as Decimals
FROM Numbers
Ecco un SQL Fiddle per testarlo:http://sqlfiddle.com/#!6/ 23d4f/29
Per tenere conto di quella piccola stranezza, ecco una versione modificata che gestirà il caso quando il valore float non ha una parte decimale:
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
Ecco il file SQL Fiddle di accompagnamento:http://sqlfiddle.com/#!6/10d54/11