Anda dapat menggunakan sesuatu seperti ini:
declare @v sql_variant
set @v=0.1242311
select SQL_VARIANT_PROPERTY(@v, 'Scale') as Scale
Ini akan mengembalikan 7
.
Saya mencoba membuat kueri di atas berfungsi dengan float
kolom tetapi tidak dapat membuatnya berfungsi seperti yang diharapkan. Ini hanya bekerja dengan sql_variant
kolom seperti yang Anda lihat di sini:http://sqlfiddle.com/#!6/5c62c/ 2
Jadi, saya melanjutkan untuk menemukan cara lain dan membangun jawaban ini , saya mendapatkan ini:
SELECT value,
LEN(
CAST(
CAST(
REVERSE(
CONVERT(VARCHAR(50), value, 128)
) AS float
) AS bigint
)
) as Decimals
FROM Numbers
Berikut adalah SQL Fiddle untuk mengujinya:http://sqlfiddle.com/#!6/ 23d4f/29
Untuk menjelaskan kekhasan kecil itu, inilah versi modifikasi yang akan menangani kasus ketika nilai float tidak memiliki bagian desimal:
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
Berikut SQL Fiddle yang menyertainya:http://sqlfiddle.com/#!6/10d54/11