23

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

4

9 回答 9

32

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

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))
于 2009-02-10T14:27:18.913 回答
3

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

DECLARE @test AS money
SET @test = 3
SELECT CAST(@test AS int), @test
于 2009-02-10T13:44:15.460 回答
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,请使用整数数据类型。

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

于 2009-02-10T13:45:08.220 回答
1

我发现这种方法直接且有用。

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

于 2014-11-12T10:37:24.757 回答
1

你可以这样尝试:

SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2)
于 2013-12-24T05:14:48.363 回答
1

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

于 2010-01-29T00:31:12.777 回答
0

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

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

于 2009-02-10T13:46:00.947 回答
0

你可以使用

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

或者

SELECT CurrencyNoDecimals = '$'+ LEFT( CONVERT(varchar, @MoneyValue,1),    
       LEN (CONVERT(varchar, @MoneyValue,1)) - 2)
于 2012-03-20T18:47:28.263 回答
0

我也有这个问题,并且被绊倒了一段时间。我想将 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”,该列的消费者会出错。

于 2015-03-20T14:39:31.050 回答