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