sql >> Databáze >  >> RDS >> Sqlserver

Jak mohu počítat desetinná místa v SQL?

Můžete použít něco takového:

declare @v sql_variant

set @v=0.1242311

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

To vrátí 7 .

Snažil jsem se, aby výše uvedený dotaz fungoval s float sloupec, ale nemohlo to fungovat podle očekávání. Funguje pouze s sql_variant sloupec, jak můžete vidět zde:http://sqlfiddle.com/#!6/5c62c/ 2

Přistoupil jsem tedy k nalezení jiného způsobu a na základě této odpovědi , mám toto:

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

Zde je SQL Fiddle k otestování:http://sqlfiddle.com/#!6/ 23d4f/29

Abychom zohlednili tento malý vtípek, zde je upravená verze, která si poradí s případem, kdy hodnota float nemá desetinnou část:

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

Zde je doprovodný SQL Fiddle:http://sqlfiddle.com/#!6/10d54/11



  1. Jaké jsou výhody databáze prodejů?

  2. Jak povolit prázdný řetězec pro celé číslo v MySQL?

  3. Laravel OrderPodle počtu vztahu

  4. Proveďte chvíli / smyčku, abyste získali 10 náhodných výsledků