Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come faccio a contare le cifre decimali in SQL?

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