Может быть что-то в этом духе:
DECLARE @tbl TABLE(ID INT IDENTITY, YourValue MONEY, Explanation VARCHAR(150));
INSERT INTO @tbl VALUES
(0.0,'just zero')
,(0.1,'1 decimal in 0.1')
,(1.1,'1 decimal in 1.1')
,(-1.1,'1 decimal in -1.1')
,(123456789.1,'1 decimal in 123456789.1')
,(1.1234,'4 decimals in 1.1234')
,(1.12345,'4 decimals in 1.12345'); --5 is rounded implicitly
- Вам не понадобятся все столбцы, я просто разместил их для визуализации промежуточных шагов
SELECT *
,YourValue % 1 AS TrickWithModulo
,ABS(YourValue)-FLOOR(ABS(YourValue)) AS MathSolution
,CAST(ABS(YourValue) % 1 AS FLOAT) AS ConvertedToFloat_no_trailin_zeros
,SUBSTRING(CONVERT(VARCHAR(100),CAST(ABS(YourValue) % 1 AS FLOAT)),3,100) JustTheDecimals
,LEN(SUBSTRING(CONVERT(VARCHAR(100),CAST(ABS(YourValue) % 1 AS FLOAT)),3,100)) Length_of_JustTheDecimals
FROM @tbl
ORDER BY Length_of_JustTheDecimals DESC;
Идея
- Получить десятичную часть
- Использовать ее как строку
- Отрезать начальные
0.
- Получить длину оставшихся цифр
- Сортируйте набор результатов, чтобы получить самые длинные десятичные дроби сверху