我在SQL Server中有一个货币数据类型。如何在查询中将0.00重新格式化为0?
答案 0 :(得分:30)
正常的资金转换将保留个人便士:
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))
答案 1 :(得分:3)
将它转换为int可以帮助你吗?钱意味着有小数位......
DECLARE @test AS money
SET @test = 3
SELECT CAST(@test AS int), @test
答案 2 :(得分: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,请使用整数数据类型。
也许你想使用decimal或numeric数据类型?
答案 3 :(得分:1)
我发现此approach直接且有用。
CONVERT(VARCHAR(10),CONVERT(MONEY,fieldname))AS PRICE
答案 4 :(得分:0)
这对我来说似乎是一个形成问题 就SQL Server的钱类型而言,0 == 0.00
如果您尝试在c#中显示0而不是0.00,则应将其转换为字符串,并根据需要对其进行格式化。 (或截断它。)
答案 5 :(得分:0)
尽管money数据类型存在内在限制,但如果你已经在使用它(或者我已经继承了它),你的问题的答案是,使用DECIMAL。
答案 6 :(得分:0)
您可以尝试这样:
SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2)
答案 7 :(得分: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',那么该列的使用者就会出错。
答案 8 :(得分:-1)
你可以使用
SELECT PARSENAME('$'+ Convert(varchar,Convert(money,@MoneyValue),1),2)
或
SELECT CurrencyNoDecimals = '$'+ LEFT( CONVERT(varchar, @MoneyValue,1),
LEN (CONVERT(varchar, @MoneyValue,1)) - 2)