T-Sql从Money数据类型中删除小数点

时间:2020-03-05 18:38:08  来源:igfitidea点击:

给定仅在Sql Server 2005中使用T-Sql的约束,是否有比从转换为varchar(此处为隐式)然后再替换小数点更好的方法,从money数据类型中删除小数点?

这是我目前所拥有的。

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

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

解决方案

回答

乘以100,然后转换为整数。

回答

我们能更详细地说明用例吗?鉴于我们会丢失所有关于比例的信息,因此从表示形式中删除小数点有点不寻常。我们是否假设总会有两位数字?如果是这样,我们可以简化乘以100,然后在转换为字符串之前四舍五入。

回答

请记住,money数据类型最多可以在小数点后4位数字。对于原始解决方案或者x100技巧,两位数以上的值可能无法正常工作。

回答

我们永远不要使用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

回答

这是魔术:

DataFormatString="{0:c0}

这将删除小数位。