sql >> Databasteknik >  >> RDS >> Sqlserver

Hur räknar jag decimaler i SQL?

Du kan använda något i stil med detta:

declare @v sql_variant

set @v=0.1242311

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

Detta returnerar 7 .

Jag försökte få ovanstående fråga att fungera med en float kolumnen men kunde inte få det att fungera som förväntat. Det fungerar bara med en sql_variant kolumn som du kan se här:http://sqlfiddle.com/#!6/5c62c/ 2

Så jag fortsatte med att hitta ett annat sätt och bygga vidare på detta svar , jag fick det här:

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

Här är en SQL Fiddle för att testa detta:http://sqlfiddle.com/#!6/ 23d4f/29

För att ta hänsyn till den lilla egenheten, här är en modifierad version som kommer att hantera fallet när flytvärdet inte har någon 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

Här är den medföljande SQL Fiddle:http://sqlfiddle.com/#!6/10d54/11



  1. Automatiserad testning av skrivbordsapplikationen:översikt över ändamålsenlighet och ramverk

  2. Hur matchar och sorterar man efter likhet i MySQL?

  3. Upptäck om ett värde innehåller minst en numerisk siffra i SQLite

  4. Byt namn på Amazon RDS-tabellnamn till versaler