Du kan använda något i stil med detta:
declare @v sql_variant
set @v=0.1242311
select SQL_VARIANT_PROPERTY(@v, 'Scale') as Scale
Detta returnerar 7
.
Jag försökte få ovanstående fråga att fungera med en float
kolumnen men kunde inte få det att fungera som förväntat. Det fungerar bara med en sql_variant
kolumn som du kan se här:http://sqlfiddle.com/#!6/5c62c/ 2
Så jag fortsatte med att hitta ett annat sätt och bygga vidare på detta svar , jag fick det här:
SELECT value,
LEN(
CAST(
CAST(
REVERSE(
CONVERT(VARCHAR(50), value, 128)
) AS float
) AS bigint
)
) as Decimals
FROM Numbers
Här är en SQL Fiddle för att testa detta:http://sqlfiddle.com/#!6/ 23d4f/29
För att ta hänsyn till den lilla egenheten, här är en modifierad version som kommer att hantera fallet när flytvärdet inte har någon decimaldel:
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
Här är den medföljande SQL Fiddle:http://sqlfiddle.com/#!6/10d54/11