Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да преброя десетичните знаци в SQL?

Можете да използвате нещо подобно:

declare @v sql_variant

set @v=0.1242311

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

Това ще върне 7 .

Опитах се да накарам горната заявка да работи с float колона, но не успя да я накара да работи според очакванията. Работи само с sql_variant колона, както можете да видите тук:http://sqlfiddle.com/#!6/5c62c/ 2

И така, продължих да намирам друг начин и надградих този отговор , получих това:

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

Ето SQL Fiddle, за да тествате това:http://sqlfiddle.com/#!6/ 23d4f/29

За да отчетем тази малка странност, ето модифицирана версия, която ще се справи със случая, когато плаващата стойност няма десетична част:

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

Ето придружаващия 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. Как да създадете база данни в SQL Server

  2. Грешка при опит за избор на x редове от DB2 (V4R5M0) чрез сървър, свързан с sql сървър, използващ OPENQUERY

  3. База данни, която може да обработва>500 милиона реда

  4. Създаване на съхранена процедура за добавяне с автоматично нарастване като основно поле?

  5. При актуализация на таблица, задействайте действие в моя .NET код