10

鉴于在 Sql Server 2005 中仅使用 T-Sql 的限制,有没有比转换为 varchar(此处为隐式)然后替换小数点更好的方法从货币数据类型中删除小数点?

这是我目前所拥有的。

SELECT REPLACE(1.23, '.', ''), REPLACE(19.99, '.', '')

它返回所需的 123 和 1999,但我想知道是否有更好的方法。有什么想法吗?

4

5 回答 5

7

乘以 100,然后转换为 int。

于 2008-08-06T19:37:14.940 回答
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

于 2008-08-08T13:53:26.377 回答
0

您能否对用例更具体一点?从表示中删除小数点有点不寻常,因为您将丢失有关比例的所有信息。您是否假设总会有两位数?如果是这样,您可以简化乘以 100,然后在转换为字符串之前进行舍入。

于 2008-08-06T19:38:38.993 回答
0

请记住,货币数据类型最多可以有小数点后 4 位。对于您的原始解决方案或 x100 技巧,超过两位数的值可能无法按预期工作。

于 2008-08-06T20:59:36.880 回答
0

这是魔术:

DataFormatString="{0:c0}

这将删除小数位。

于 2009-05-20T06:02:47.553 回答