Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como contar casas decimais no SQL?


Você pode usar algo assim:
declare @v sql_variant

set @v=0.1242311

select SQL_VARIANT_PROPERTY(@v, 'Scale') as Scale

Isso retornará 7 .

Eu tentei fazer a consulta acima funcionar com um float coluna, mas não conseguiu fazê-lo funcionar como esperado. Ele só funciona com um sql_variant coluna como você pode ver aqui:http://sqlfiddle.com/#!6/5c62c/ 2

Então, continuei procurando outra maneira e aproveitando esta resposta , Eu tenho esse:
SELECT value,
LEN(
    CAST(
         CAST(
              REVERSE(
                      CONVERT(VARCHAR(50), value, 128)
                     ) AS float
             ) AS bigint
        )
   ) as Decimals
FROM Numbers

Aqui está um SQL Fiddle para testar isso:http://sqlfiddle.com/#!6/ 23d4f/29

Para explicar essa pequena peculiaridade, aqui está uma versão modificada que lidará com o caso em que o valor float não tem parte decimal:
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

Aqui está o SQL Fiddle que acompanha:http://sqlfiddle.com/#!6/10d54/11