sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo cuento decimales en SQL?

Puedes usar algo como esto:

declare @v sql_variant

set @v=0.1242311

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

Esto devolverá 7 .

Traté de hacer que la consulta anterior funcionara con un float columna pero no pudo hacer que funcionara como se esperaba. Solo funciona con un sql_variant columna como puede ver aquí:http://sqlfiddle.com/#!6/5c62c/ 2

Entonces, procedí a encontrar otra forma y me basé en esta respuesta , obtuve esto:

SELECT value,
LEN(
    CAST(
         CAST(
              REVERSE(
                      CONVERT(VARCHAR(50), value, 128)
                     ) AS float
             ) AS bigint
        )
   ) as Decimals
FROM Numbers

Aquí hay un SQL Fiddle para probar esto:http://sqlfiddle.com/#!6/ 23d4f/29

Para dar cuenta de esa pequeña peculiaridad, aquí hay una versión modificada que manejará el caso cuando el valor flotante no tenga una 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

Aquí está el SQL Fiddle que lo acompaña:http://sqlfiddle.com/#!6/10d54/11