【问题标题】:How do I convert from a money datatype in SQL server?如何从 SQL Server 中的货币数据类型转换?
【发布时间】:2010-10-06 15:36:38
【问题描述】:

我在 SQL Server 中有一个 money 数据类型。如何在查询中将 0.00 重新格式化为 0?

【问题讨论】:

  • 提供更多细节,您可能会得到一些答案。
  • 只需转换或转换int or bigint

标签: sql-server currency


【解决方案1】:

正常的货币兑换将保留个人便士:

SELECT convert(varchar(30), moneyfield, 1)

最后一个参数决定了输出格式是什么样的:

0(默认)小数点左边每三位不加逗号,小数点右边每两位不加逗号;例如,4235.98。

1 逗号在小数点左边每三位,在小数点右边两位;例如,3,510.92。

2 小数点左边每三位不加逗号,小数点右边每四位不加逗号;例如,4235.9819。

如果您想截断便士并以磅为单位计算,您可以使用四舍五入到最接近的磅、地板到最低的整磅或天花板来四舍五入:

SELECT convert(int, round(moneyfield, 0))
SELECT convert(int, floor(moneyfield))
SELECT convert(int, ceiling(moneyfield))

【讨论】:

  • 如果你想丢弃所有的便士值,这将起作用,而不仅仅是当它是 0.00 时。请参阅我的答案。
【解决方案2】:

将其转换为 int 对您有帮助吗?钱是有小数位的...

DECLARE @test AS money
SET @test = 3
SELECT CAST(@test AS int), @test

【讨论】:

    【解决方案3】:

    首先,您不应该使用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

    现在回答您的问题(有点含糊),money 数据类型在小数点后总是有两位。如果您不想要小数部分或转换为 int,请使用整数数据类型。

    也许您想使用小数或数字数据类型?

    【讨论】:

    • Microsoft Dynamics 使用货币数据类型。我今天看到了。
    • 想要倍增 $450.50 * $32.76 到底有多有效,我在这里坐了一会儿,想着任何时候我真的想要将多个货币价值组合在一起,或者将它们分开。我使用了您的示例 sql 并将 */ 更改为使用 +- ,甚至将它们包装在 * 和 / 以及每个匹配的值中。
    • 有关此答案的详细 cmets,请参阅this answer
    【解决方案4】:

    尽管货币数据类型存在内在限制,但如果您已经在使用它(或者像我一样继承了它),那么您的问题的答案是使用 DECIMAL。

    【讨论】:

      【解决方案5】:

      你可以这样试试:

      SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2)
      

      【讨论】:

        【解决方案6】:

        我发现这个approach 直接而有用。

        CONVERT(VARCHAR(10), CONVERT(MONEY, fieldname)) AS PRICE

        【讨论】:

          【解决方案7】:

          这对我来说似乎是一个格式问题。
          就 SQL Server 的货币类型而言 0 == 0.00

          如果您想在 c# 中显示 0 而不是 0.00,您应该将其转换为字符串,并根据需要对其进行格式化。 (或截断它。)

          【讨论】:

            【解决方案8】:

            你可以使用

            SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2)
            

            SELECT CurrencyNoDecimals = '$'+ LEFT( CONVERT(varchar, @MoneyValue,1),    
                   LEN (CONVERT(varchar, @MoneyValue,1)) - 2)
            

            【讨论】:

              【解决方案9】:

              我也有这个问题,并且被绊倒了一段时间。我想将 0.00 显示为 0,否则保留小数点。以下方法无效:

              CASE WHEN Amount= 0 THEN CONVERT(VARCHAR(30), Amount, 1) ELSE Amount END
              

              因为结果列被强制为 MONEY 列。为了解决它,以下工作

              CASE WHEN Amount= 0 THEN CONVERT(VARCHAR(30), '0', 1) ELSE CONVERT (VARCHAR(30), Amount, 1) END
              

              这很重要,因为我的最终目标列是 VARCHAR(30),如果金额是“0.00”而不是“0”,该列的使用者会出错。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2016-05-22
                • 1970-01-01
                • 1970-01-01
                • 2015-02-02
                • 1970-01-01
                • 2011-06-17
                • 2016-04-21
                • 2012-06-26
                相关资源
                最近更新 更多