我在 SQL Server 中有一个金钱数据类型。如何在查询中将 0.00 重新格式化为 0?
9 回答
正常的货币兑换将保留个人便士:
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))
将其转换为 int 对您有帮助吗?钱是有小数位的...
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
现在回答你的问题(有点模糊),money 数据类型在小数点后总是有两位。如果您不想要小数部分或转换为 int,请使用整数数据类型。
也许您想使用小数或数字数据类型?
我发现这种方法直接且有用。
CONVERT(VARCHAR(10), CONVERT(MONEY, fieldname)) AS PRICE
你可以这样尝试:
SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2)
尽管货币数据类型存在内在限制,但如果您已经在使用它(或者像我一样继承了它),您的问题的答案似乎是,使用 DECIMAL。
这对我来说似乎是一个格式化问题。
就 SQL Server 的货币类型而言 0 == 0.00
如果您想在 c# 中显示 0 而不是 0.00,则应将其转换为字符串,并根据需要对其进行格式化。(或截断它。)
你可以使用
SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2)
或者
SELECT CurrencyNoDecimals = '$'+ LEFT( CONVERT(varchar, @MoneyValue,1),
LEN (CONVERT(varchar, @MoneyValue,1)) - 2)
我也有这个问题,并且被绊倒了一段时间。我想将 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”,该列的消费者会出错。