【问题标题】:T-Sql Remove Decimal Point From Money Data TypeT-Sql 从 Money 数据类型中删除小数点
【发布时间】:2023-03-12 05:36:01
【问题描述】:

鉴于在 Sql Server 2005 中仅使用 T-Sql 的限制,是否有比转换为 varchar(此处为隐式)然后替换小数点更好的方法从货币数据类型中删除小数点?

这是我目前拥有的。

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

返回所需的 123 和 1999,但我想知道是否有更好的方法。有什么想法吗?

【问题讨论】:

    标签: sql-server tsql sql-server-2005


    【解决方案1】:

    乘以 100,然后转换为 int。

    【讨论】:

      【解决方案2】:

      您永远不应该使用 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】:

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

        【讨论】:

          【解决方案4】:

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

          【讨论】:

            【解决方案5】:

            这就是魔法:

            DataFormatString="{0:c0}
            

            这将删除小数位。

            【讨论】:

            • 原来的限制是只能在T-Sql中。 DataFormatString 是一个 .Net 的东西。
            猜你喜欢
            • 2019-10-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-06-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多