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

Hvordan tæller jeg decimaler i SQL?

Du kan bruge noget som dette:

declare @v sql_variant

set @v=0.1242311

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

Dette vil returnere 7 .

Jeg forsøgte at få ovenstående forespørgsel til at fungere med en float kolonne, men kunne ikke få det til at fungere som forventet. Det virker kun med en sql_variant kolonne som du kan se her:http://sqlfiddle.com/#!6/5c62c/ 2

Så jeg fortsatte med at finde en anden måde og byggede på dette svar , jeg fik dette:

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

Her er en SQL Fiddle til at teste dette af:http://sqlfiddle.com/#!6/ 23d4f/29

For at tage højde for det lille særpræg er her en modificeret version, der vil håndtere tilfældet, når flydende værdi ikke har nogen decimaldel:

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

Her er den medfølgende SQL Fiddle:http://sqlfiddle.com/#!6/10d54/11



  1. udtræk de id'er, der er tildelt en liste over bruger-id'er

  2. Dvale native forespørgsel - char(3) kolonne

  3. Strengaggregation i Oracle:Flere rækker i en enkelt kolonne

  4. Opret triggerfejl:ugyldig syntaks