代码之家  ›  专栏  ›  技术社区  ›  Pete

T-SQL从money数据类型中删除小数点

  •  7
  • Pete  · 技术社区  · 17 年前

    考虑到SQL Server 2005中只使用T-SQL的约束,是否有更好的方法从money数据类型中删除小数点,而不是转换为varchar(此处隐式地),然后替换小数点?

    这是我目前拥有的。

    SELECT REPLACE(1.23, '.', ''), REPLACE(19.99, '.', '')
    

    它返回了期望的123和1999年,但我想知道是否有更好的方法。有什么想法吗?

    5 回复  |  直到 8 年前
        1
  •  6
  •   Yaakov Ellis NevilleDNZ    17 年前

    乘以100,然后转换为int。

        2
  •  3
  •   yoozer8    13 年前

    您不应该使用money数据类型来存储货币值。如果你做任何计算,你会得到被截断的结果。运行下面的内容来了解我的意思

    DECLARE
    @mon1 MONEY,
    @mon2 MONEY,
    @mon3 MONEY,
    @mon4 MONEY,
    @num1 DECIMAL(19,4),
    @num2 DECIMAL(19,4),
    @num3 DECIMAL(19,4),
    @num4 DECIMAL(19,4)
    
    SELECT
    @mon1 = 100, @mon2 = 339, @mon3 = 10000,
    @num1 = 100, @num2 = 339, @num3 = 10000
    
    SET @mon4 = @mon1/@mon2*@mon3
    SET @num4 = @num1/@num2*@num3
    
    SELECT @mon4 AS moneyresult,
    @num4 AS numericresult
    

    输出: 2949.0000 2949.8525

        3
  •  0
  •   Curt Hagenlocher    17 年前

    你能更具体地描述一下用例吗?从表示中删除小数点有点不寻常,因为您将丢失有关小数位数的所有信息。你假设总是有两位数吗?如果是这样,可以简化乘100,然后在转换为字符串之前进行舍入。

        4
  •  0
  •   Lance Fisher    17 年前

    请记住,money数据类型的小数点后最多可以有4位数字。对于原始解决方案或x100技巧,超过两位数的值可能无法按预期工作。

        5
  •  0
  •   C B dkretz    8 年前

    这就是魔法:

    DataFormatString="{0:c0}
    

    这将删除小数点。

    推荐文章