代码之家  ›  专栏  ›  技术社区  ›  nick zoum

如何获取T-SQL中小数最多的货币记录?

  •  0
  • nick zoum  · 技术社区  · 6 年前

    0.01 , 0.0112 0.001 ),结果应该是 0.0112个 .

    我的第一个想法是把价值转换成 varchar

    SELECT CONVERT(VARCHAR, CAST(Value as DECIMAL(18, 6))) FROM Table
    
    0 回复  |  直到 6 年前
        1
  •  1
  •   Gottfried Lesigang    6 年前

    也许是这样的:

    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.
    • 对结果集排序以获取 最长的 小数在上