Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment compter les décimales en SQL ?

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