Vous pouvez utiliser quelque chose comme ceci :
declare @v sql_variant
set @v=0.1242311
select SQL_VARIANT_PROPERTY(@v, 'Scale') as Scale
Cela renverra 7
.
J'ai essayé de faire fonctionner la requête ci-dessus avec un float
colonne mais n'a pas pu le faire fonctionner comme prévu. Cela ne fonctionne qu'avec un sql_variant
colonne comme vous pouvez le voir ici :http://sqlfiddle.com/#!6/5c62c/ 2
J'ai donc cherché un autre moyen et m'appuyant sur cette réponse , j'ai ça :
SELECT value,
LEN(
CAST(
CAST(
REVERSE(
CONVERT(VARCHAR(50), value, 128)
) AS float
) AS bigint
)
) as Decimals
FROM Numbers
Voici un SQL Fiddle pour tester cela :http://sqlfiddle.com/#!6/ 23d4f/29
Pour tenir compte de cette petite bizarrerie, voici une version modifiée qui gérera le cas où la valeur flottante n'a pas de partie décimale :
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
Voici le SQL Fiddle qui l'accompagne :http://sqlfiddle.com/#!6/10d54/11