2008-08-06 99 views
7

鉴于在Sql Server 2005中仅使用T-Sql的约束,是否有更好的方法来从货币数据类型中除去转换为varchar的小数点(这里是隐含的)然后更换小数点?T-Sql从货币数据类型中删除小数点

这是我目前的。

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

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

回答

6

乘以100,然后转换为int。

0

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

0

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

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

0

这里是魔法:

DataFormatString="{0:c0} 

这将删除小数。

+1

最初的约束是它只能在T-Sql中。 DataFormatString是一个.Net的东西。 – Pete 2009-05-20 15:16:16