Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie zähle ich Dezimalstellen in SQL?

Sie können so etwas verwenden:

declare @v sql_variant

set @v=0.1242311

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

Dies gibt 7 zurück .

Ich habe versucht, die obige Abfrage mit einem float zum Laufen zu bringen Spalte, konnte es aber nicht wie erwartet zum Laufen bringen. Es funktioniert nur mit einer sql_variant Spalte, wie Sie hier sehen können:http://sqlfiddle.com/#!6/5c62c/ 2

Also habe ich einen anderen Weg gefunden und auf dieser Antwort aufgebaut , ich habe das hier:

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

Hier ist eine SQL-Fiddle, um dies zu testen:http://sqlfiddle.com/#!6/ 23d4f/29

Um dieser kleinen Macke Rechnung zu tragen, hier ist eine modifizierte Version, die den Fall handhabt, wenn der Gleitkommawert keinen Dezimalteil hat:

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 ist das begleitende SQL Fiddle:http://sqlfiddle.com/#!6/10d54/11