sql >> Database >  >> RDS >> Sqlserver

Hoe tel ik decimalen in SQL?

Je kunt zoiets als dit gebruiken:

declare @v sql_variant

set @v=0.1242311

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

Dit retourneert 7 .

Ik heb geprobeerd de bovenstaande query te laten werken met een float column, maar kreeg het niet werkend zoals verwacht. Het werkt alleen met een sql_variant kolom zoals je hier kunt zien:http://sqlfiddle.com/#!6/5c62c/ 2

Dus ging ik verder met het vinden van een andere manier en bouwde ik voort op dit antwoord , ik heb dit:

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

Hier is een SQL Fiddle om dit uit te testen:http://sqlfiddle.com/#!6/ 23d4f/29

Om rekening te houden met die kleine gril, hier is een aangepaste versie die het geval zal behandelen wanneer de float-waarde geen decimaal deel heeft:

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

Hier is de bijbehorende SQL Fiddle:http://sqlfiddle.com/#!6/10d54/11



  1. Java controleert of de waarde in de database bestaat

  2. Hoe u panda's DataFrame van het gemengde type efficiënt in een Oracle DB kunt laden

  3. Hoe een opgeslagen procedure uit te voeren met invoer- en uitvoerparameters met behulp van EF?

  4. 'De opgegeven invoer vertegenwoordigt geen geldige geografie-instantie' uitzondering bij gebruik van SqlGeographyBuilder