Как получить запись денег с большинством десятичных знаков в T-SQL? - PullRequest
0 голосов
/ 19 февраля 2019

Как я могу получить запись о деньгах из столбца с наиболее "активными" десятичными точками.Например, из списка (0.01, 0.0112 и 0.001) результат должен быть 0.0112.

Моей первой мыслью было преобразовать значение в varchar и получить записьс самой большой длиной.Но это не сработало, так как мне приходилось указывать длину, если я не хочу, чтобы она округлялась.Вот сценарий:

SELECT CONVERT(VARCHAR, CAST(Value as DECIMAL(18, 6))) FROM Table

1 Ответ

0 голосов
/ 19 февраля 2019

Может быть что-то в этом духе:

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.
  • Получить длину оставшихся цифр
  • Сортируйте набор результатов, чтобы получить самые длинные десятичные дроби сверху
...