如何从SQL服务器中的money数据类型转换?

时间:2009-02-10 13:38:38

标签: sql-server currency

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

9 个答案:

答案 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)