Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak liczyć miejsca dziesiętne w SQL?

Możesz użyć czegoś takiego:

declare @v sql_variant

set @v=0.1242311

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

To zwróci 7 .

Próbowałem, aby powyższe zapytanie działało z float kolumna, ale nie udało się jej uruchomić zgodnie z oczekiwaniami. Działa tylko z sql_variant kolumna jak widać tutaj:http://sqlfiddle.com/#!6/5c62c/ 2

Więc zacząłem szukać innego sposobu i opierając się na tej odpowiedzi , mam to:

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

Oto SQL Fiddle do przetestowania tego:http://sqlfiddle.com/#!6/ 23d4f/29

Aby uwzględnić to małe dziwactwo, oto zmodyfikowana wersja, która obsłuży przypadek, gdy wartość zmiennoprzecinkowa nie ma części dziesiętnej:

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

Oto towarzyszące mu SQL Fiddle:http://sqlfiddle.com/#!6/10d54/11



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak skopiować rekord w tabeli SQL, ale zamienić unikalny identyfikator nowego wiersza?

  2. Musisz zadeklarować zmienną @myvariable error za pomocą sparametryzowanego zapytania ADO

  3. Jak wybrać tylko pierwsze wiersze dla każdej unikalnej wartości kolumny?

  4. Hibernacja:W SQL Server 2008 kolumna została zmieniona z datetime na datetime2. Jak mogę zaktualizować konfigurację hibernacji, aby to odzwierciedlić?

  5. T-Sql - Zamów przez na alfanumerycznym