我在 SQL Server 中有一个货币数据类型。 如何在查询中将 0.00 重新格式化为 0?
正常的货币转换会保留每一分钱:
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))
DECLARE @test AS money
SET @test = 3
SELECT CAST(@test AS int), @test
首先,您永远不应该使用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
现在回答你的问题(有点含糊不清),货币数据类型始终有小数点后两位。如果您不想要小数部分,请使用整数数据类型或将其转换为int。
也许您想使用十进制或数字数据类型?
我也遇到了这个问题,并且在一段时间内被绊倒了。我想要将0.00显示为0,而其他情况下保留小数点。以下方法没有起作用:
CASE WHEN Amount= 0 THEN CONVERT(VARCHAR(30), Amount, 1) ELSE Amount END
CASE WHEN Amount= 0 THEN CONVERT(VARCHAR(30), '0', 1) ELSE CONVERT (VARCHAR(30), Amount, 1) END
看起来,尽管货币数据类型存在固有限制,但如果您已经在使用它(或像我一样继承了它),那么回答您的问题的答案是使用DECIMAL。
SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2)
你可以使用
SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2)
或者
SELECT CurrencyNoDecimals = '$'+ LEFT( CONVERT(varchar, @MoneyValue,1),
LEN (CONVERT(varchar, @MoneyValue,1)) - 2)
这看起来像是一个格式问题。
就 SQL Server 的货币类型而言,0 == 0.00
如果你想在 C# 中显示 0 而不是 0.00,你应该将它转换为字符串,并按照你想要的格式进行格式化(或截断它)。
int
或bigint
。 - Amirhossein