Bạn có thể sử dụng một cái gì đó như sau:
declare @v sql_variant
set @v=0.1242311
select SQL_VARIANT_PROPERTY(@v, 'Scale') as Scale
Điều này sẽ trả về 7
.
Tôi đã cố gắng làm cho truy vấn trên hoạt động với float
nhưng không thể làm cho nó hoạt động như mong đợi. Nó chỉ hoạt động với sql_variant
như bạn có thể thấy tại đây: http://sqlfiddle.com/#!6/5c62c/ 2
Vì vậy, tôi đã tiếp tục tìm một cách khác và xây dựng dựa trên câu trả lời này , Tôi nhận được cái này:
SELECT value,
LEN(
CAST(
CAST(
REVERSE(
CONVERT(VARCHAR(50), value, 128)
) AS float
) AS bigint
)
) as Decimals
FROM Numbers
Đây là SQL Fiddle để kiểm tra điều này: http://sqlfiddle.com/#!6/ 23d4f / 29
Để giải thích cho vấn đề nhỏ đó, đây là một phiên bản đã sửa đổi sẽ xử lý trường hợp giá trị float không có phần thập phân:
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
Đây là SQL Fiddle đi kèm: http://sqlfiddle.com/#!6/10d54/11